Skip to content

Commit

Permalink
[#221] [RF] Mixin Formatters to Extensions. Detouch icon converter
Browse files Browse the repository at this point in the history
  • Loading branch information
lyskouski committed Sep 8, 2023
1 parent d1338a4 commit 06cae24
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 19 deletions.
4 changes: 2 additions & 2 deletions lib/_classes/structure/account_app_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import 'package:app_finance/_classes/structure/currency/currency_provider.dart';
import 'package:app_finance/_classes/structure/abstract_app_data.dart';
import 'package:app_finance/_classes/storage/app_data.dart';
import 'package:app_finance/_mixins/formatter_mixin.dart';
import 'package:app_finance/_ext/int_ext.dart';
import 'package:flutter/material.dart';

class AccountAppData extends AbstractAppData {
Expand Down Expand Up @@ -64,7 +64,7 @@ class AccountAppData extends AbstractAppData {
progress: json['progress'],
description: json['description'],
color: json['color'] != null ? MaterialColor(json['color'], const <int, Color>{}) : null,
icon: json['icon'] != null ? FormatterMixin.getIconFromString(json['icon']) : null,
icon: json['icon'] != null ? int.tryParse(json['icon'])?.toIcon() : null,
currency: CurrencyProvider.findByCode(json['currency']),
createdAt: DateTime.parse(json['createdAt']),
updatedAt: DateTime.parse(json['updatedAt']),
Expand Down
4 changes: 2 additions & 2 deletions lib/_classes/structure/budget_app_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:app_finance/_classes/herald/app_locale.dart';
import 'package:app_finance/_classes/structure/currency/currency_provider.dart';
import 'package:app_finance/_classes/structure/abstract_app_data.dart';
import 'package:app_finance/_classes/storage/app_data.dart';
import 'package:app_finance/_mixins/formatter_mixin.dart';
import 'package:app_finance/_ext/int_ext.dart';
import 'package:flutter/material.dart';

class BudgetAppData extends AbstractAppData {
Expand Down Expand Up @@ -58,7 +58,7 @@ class BudgetAppData extends AbstractAppData {
uuid: json['uuid'],
progress: json['progress'],
color: json['color'] != null ? MaterialColor(json['color'], const <int, Color>{}) : null,
icon: json['icon'] != null ? FormatterMixin.getIconFromString(json['icon']) : null,
icon: json['icon'] != null ? int.tryParse(json['icon'])?.toIcon() : null,
currency: CurrencyProvider.findByCode(json['currency']),
updatedAt: DateTime.parse(json['updatedAt']),
createdAt: DateTime.parse(json['createdAt']),
Expand Down
4 changes: 2 additions & 2 deletions lib/_classes/structure/goal_app_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import 'package:app_finance/_classes/structure/currency/currency_provider.dart';
import 'package:app_finance/_classes/structure/abstract_app_data.dart';
import 'package:app_finance/_classes/storage/app_data.dart';
import 'package:app_finance/_mixins/formatter_mixin.dart';
import 'package:app_finance/_ext/int_ext.dart';
import 'package:flutter/material.dart';

class GoalAppData extends AbstractAppData {
Expand Down Expand Up @@ -64,7 +64,7 @@ class GoalAppData extends AbstractAppData {
progress: json['progress'],
description: json['description'],
color: json['color'] != null ? MaterialColor(json['color'], const <int, Color>{}) : null,
icon: json['icon'] != null ? FormatterMixin.getIconFromString(json['icon']) : null,
icon: json['icon'] != null ? int.tryParse(json['icon'])?.toIcon() : null,
currency: CurrencyProvider.findByCode(json['currency']),
updatedAt: DateTime.parse(json['updatedAt']),
createdAt: DateTime.parse(json['createdAt']),
Expand Down
4 changes: 2 additions & 2 deletions lib/_classes/structure/invoice_app_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:app_finance/_classes/herald/app_locale.dart';
import 'package:app_finance/_classes/storage/app_data.dart';
import 'package:app_finance/_classes/structure/abstract_app_data.dart';
import 'package:app_finance/_classes/structure/currency/currency_provider.dart';
import 'package:app_finance/_mixins/formatter_mixin.dart';
import 'package:app_finance/_ext/int_ext.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

Expand Down Expand Up @@ -64,7 +64,7 @@ class InvoiceAppData extends AbstractAppData {
progress: json['progress'],
description: json['description'],
color: json['color'] != null ? MaterialColor(json['color'], const <int, Color>{}) : null,
icon: json['icon'] != null ? FormatterMixin.getIconFromString(json['icon']) : null,
icon: json['icon'] != null ? int.tryParse(json['icon'])?.toIcon() : null,
currency: CurrencyProvider.findByCode(json['currency']),
createdAt: DateTime.parse(json['createdAt']),
updatedAt: DateTime.parse(json['updatedAt']),
Expand Down
17 changes: 17 additions & 0 deletions lib/_ext/int_ext.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright 2023 The terCAD team. All rights reserved.
// Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.

import 'package:flutter/material.dart';

extension IntExt on int {
static final Map<String, IconData> _cache = {};

IconData toIcon() {
if (_cache.containsKey(this)) {
return _cache[this]!;
} else {
const String fontFamily = 'MaterialIcons';
return IconData(this, fontFamily: fontFamily);
}
}
}
11 changes: 0 additions & 11 deletions lib/_mixins/formatter_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@

import 'package:app_finance/_classes/herald/app_locale.dart';
import 'package:currency_picker/currency_picker.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

mixin FormatterMixin {
static final Map<String, IconData> _cache = {};
Currency? currency;

String getDateFormatted(DateTime date) {
Expand All @@ -28,13 +26,4 @@ mixin FormatterMixin {
);
return formatter.format(value);
}

static IconData getIconFromString(int icon) {
if (_cache.containsKey(icon)) {
return _cache[icon]!;
} else {
const String fontFamily = 'MaterialIcons';
return IconData(icon, fontFamily: fontFamily);
}
}
}
14 changes: 14 additions & 0 deletions test/unit/_ext/int_ext_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright 2023 The terCAD team. All rights reserved.
// Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.

import 'package:app_finance/_ext/int_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('IntExt', () {
test('toIcon', () {
expect(984284.toIcon(), Icons.currency_exchange);
});
});
}

0 comments on commit 06cae24

Please sign in to comment.