From 63b5354b7259897fc482c53ade27daf4da15e083 Mon Sep 17 00:00:00 2001 From: "Alexander \"PapaTutuWawa" Date: Tue, 6 May 2025 21:59:03 +0200 Subject: [PATCH] Make the pie chart widget reusable --- lib/database/collections/account.g.dart | 231 ++++---- lib/database/collections/beneficiary.g.dart | 471 ++++++++------- lib/database/collections/budget.dart | 6 +- lib/database/collections/budget.g.dart | 537 ++++++++++-------- .../collections/expense_category.g.dart | 261 ++++----- lib/database/collections/recurrent.g.dart | 434 ++++++++------ lib/database/collections/template.g.dart | 430 +++++++------- lib/database/collections/transaction.g.dart | 521 +++++++++-------- lib/database/database.dart | 29 +- lib/ui/navigation.dart | 6 +- lib/ui/pages/account/account.dart | 19 +- lib/ui/pages/account/breakdown_card.dart | 201 ++++--- lib/ui/pages/account/total_balance_card.dart | 2 +- lib/ui/pages/budgets/add_budget.dart | 47 +- lib/ui/pages/budgets/add_budget_item.dart | 82 +-- lib/ui/pages/budgets/budget_details.dart | 239 ++------ lib/ui/pages/budgets/budgets.dart | 28 +- lib/ui/pages/budgets/edit_budget.dart | 66 ++- lib/ui/state/core.dart | 4 +- lib/ui/state/core.freezed.dart | 392 +++++++------ lib/ui/utils.dart | 13 +- lib/ui/widgets/account_indicator.dart | 3 +- lib/ui/widgets/piechart.dart | 84 +++ lib/ui/widgets/piechart_card.dart | 82 +++ 24 files changed, 2264 insertions(+), 1924 deletions(-) create mode 100644 lib/ui/widgets/piechart.dart create mode 100644 lib/ui/widgets/piechart_card.dart diff --git a/lib/database/collections/account.g.dart b/lib/database/collections/account.g.dart index ead950f..c7f17ee 100644 --- a/lib/database/collections/account.g.dart +++ b/lib/database/collections/account.g.dart @@ -17,11 +17,7 @@ const AccountSchema = CollectionSchema( name: r'Account', id: -6646797162501847804, properties: { - r'name': PropertySchema( - id: 0, - name: r'name', - type: IsarType.string, - ) + r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), }, estimateSize: _accountEstimateSize, serialize: _accountSerialize, @@ -110,10 +106,7 @@ extension AccountQueryWhereSort on QueryBuilder { extension AccountQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } @@ -139,8 +132,10 @@ extension AccountQueryWhere on QueryBuilder { }); } - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { + QueryBuilder idGreaterThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -148,8 +143,10 @@ extension AccountQueryWhere on QueryBuilder { }); } - QueryBuilder idLessThan(Id id, - {bool include = false}) { + QueryBuilder idLessThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -164,12 +161,14 @@ extension AccountQueryWhere on QueryBuilder { bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -178,10 +177,9 @@ extension AccountQueryFilter on QueryBuilder { QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } @@ -190,11 +188,13 @@ extension AccountQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -203,11 +203,13 @@ extension AccountQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -218,29 +220,31 @@ extension AccountQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder nameIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'name', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'name'), + ); }); } QueryBuilder nameIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'name', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'name'), + ); }); } @@ -249,11 +253,13 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -263,12 +269,14 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -278,12 +286,14 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -295,14 +305,16 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } @@ -311,11 +323,13 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -324,53 +338,59 @@ extension AccountQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameContains( - String value, - {bool caseSensitive = true}) { + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameMatches( - String pattern, - {bool caseSensitive = true}) { + String pattern, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'name', value: ''), + ); }); } QueryBuilder nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'name', value: ''), + ); }); } } @@ -424,8 +444,9 @@ extension AccountQuerySortThenBy extension AccountQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByName( - {bool caseSensitive = true}) { + QueryBuilder distinctByName({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/beneficiary.g.dart b/lib/database/collections/beneficiary.g.dart index d1acf98..7943e15 100644 --- a/lib/database/collections/beneficiary.g.dart +++ b/lib/database/collections/beneficiary.g.dart @@ -22,17 +22,13 @@ const BeneficiarySchema = CollectionSchema( name: r'imagePath', type: IsarType.string, ), - r'name': PropertySchema( - id: 1, - name: r'name', - type: IsarType.string, - ), + r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), r'type': PropertySchema( id: 2, name: r'type', type: IsarType.byte, enumMap: _BeneficiarytypeEnumValueMap, - ) + ), }, estimateSize: _beneficiaryEstimateSize, serialize: _beneficiarySerialize, @@ -46,7 +42,7 @@ const BeneficiarySchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ) + ), }, embeddedSchemas: {}, getId: _beneficiaryGetId, @@ -94,7 +90,7 @@ Beneficiary _beneficiaryDeserialize( object.name = reader.readString(offsets[1]); object.type = _BeneficiarytypeValueEnumMap[reader.readByteOrNull(offsets[2])] ?? - BeneficiaryType.account; + BeneficiaryType.account; return object; } @@ -111,16 +107,14 @@ P _beneficiaryDeserializeProp

( return (reader.readString(offset)) as P; case 2: return (_BeneficiarytypeValueEnumMap[reader.readByteOrNull(offset)] ?? - BeneficiaryType.account) as P; + BeneficiaryType.account) + as P; default: throw IsarError('Unknown property with id $propertyId'); } } -const _BeneficiarytypeEnumValueMap = { - 'account': 0, - 'other': 1, -}; +const _BeneficiarytypeEnumValueMap = {'account': 0, 'other': 1}; const _BeneficiarytypeValueEnumMap = { 0: BeneficiaryType.account, 1: BeneficiaryType.other, @@ -135,7 +129,10 @@ List> _beneficiaryGetLinks(Beneficiary object) { } void _beneficiaryAttach( - IsarCollection col, Id id, Beneficiary object) { + IsarCollection col, + Id id, + Beneficiary object, +) { object.id = id; object.account.attach(col, col.isar.collection(), r'account', id); } @@ -153,15 +150,13 @@ extension BeneficiaryQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder idNotEqualTo( - Id id) { + Id id, + ) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -183,8 +178,10 @@ extension BeneficiaryQueryWhere }); } - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { + QueryBuilder idGreaterThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -192,8 +189,10 @@ extension BeneficiaryQueryWhere }); } - QueryBuilder idLessThan(Id id, - {bool include = false}) { + QueryBuilder idLessThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -208,12 +207,14 @@ extension BeneficiaryQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -221,12 +222,12 @@ extension BeneficiaryQueryWhere extension BeneficiaryQueryFilter on QueryBuilder { QueryBuilder idEqualTo( - Id value) { + Id value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } @@ -235,11 +236,13 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -248,11 +251,13 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -263,82 +268,87 @@ extension BeneficiaryQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - imagePathIsNull() { + imagePathIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'imagePath', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'imagePath'), + ); }); } QueryBuilder - imagePathIsNotNull() { + imagePathIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'imagePath', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'imagePath'), + ); }); } QueryBuilder - imagePathEqualTo( - String? value, { - bool caseSensitive = true, - }) { + imagePathEqualTo(String? value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathGreaterThan( + imagePathGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathLessThan( + imagePathLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathBetween( + imagePathBetween( String? lower, String? upper, { bool includeLower = true, @@ -346,84 +356,86 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'imagePath', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'imagePath', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathStartsWith( - String value, { - bool caseSensitive = true, - }) { + imagePathStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathEndsWith( - String value, { - bool caseSensitive = true, - }) { + imagePathEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathContains(String value, {bool caseSensitive = true}) { + imagePathContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'imagePath', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'imagePath', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathMatches(String pattern, {bool caseSensitive = true}) { + imagePathMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'imagePath', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'imagePath', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - imagePathIsEmpty() { + imagePathIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'imagePath', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'imagePath', value: ''), + ); }); } QueryBuilder - imagePathIsNotEmpty() { + imagePathIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'imagePath', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'imagePath', value: ''), + ); }); } @@ -432,11 +444,13 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -446,12 +460,14 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -461,12 +477,14 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -478,14 +496,16 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } @@ -494,11 +514,13 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -507,64 +529,70 @@ extension BeneficiaryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameContains( - String value, - {bool caseSensitive = true}) { + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameMatches( - String pattern, - {bool caseSensitive = true}) { + String pattern, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'name', value: ''), + ); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'name', value: ''), + ); }); } QueryBuilder typeEqualTo( - BeneficiaryType value) { + BeneficiaryType value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'type', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'type', value: value), + ); }); } @@ -573,11 +601,13 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'type', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'type', + value: value, + ), + ); }); } @@ -586,11 +616,13 @@ extension BeneficiaryQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'type', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'type', + value: value, + ), + ); }); } @@ -601,13 +633,15 @@ extension BeneficiaryQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'type', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'type', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } @@ -618,14 +652,15 @@ extension BeneficiaryQueryObject extension BeneficiaryQueryLinks on QueryBuilder { QueryBuilder account( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -724,15 +759,17 @@ extension BeneficiaryQuerySortThenBy extension BeneficiaryQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByImagePath( - {bool caseSensitive = true}) { + QueryBuilder distinctByImagePath({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'imagePath', caseSensitive: caseSensitive); }); } - QueryBuilder distinctByName( - {bool caseSensitive = true}) { + QueryBuilder distinctByName({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/budget.dart b/lib/database/collections/budget.dart index e97b0d1..bfb64f9 100644 --- a/lib/database/collections/budget.dart +++ b/lib/database/collections/budget.dart @@ -5,9 +5,7 @@ import 'account.dart'; part 'budget.g.dart'; -enum BudgetPeriod { - month -} +enum BudgetPeriod { month } @collection class BudgetItem { @@ -34,4 +32,4 @@ class Budget { final account = IsarLink(); final items = IsarLinks(); -} \ No newline at end of file +} diff --git a/lib/database/collections/budget.g.dart b/lib/database/collections/budget.g.dart index d017b8e..2700779 100644 --- a/lib/database/collections/budget.g.dart +++ b/lib/database/collections/budget.g.dart @@ -17,11 +17,7 @@ const BudgetItemSchema = CollectionSchema( name: r'BudgetItem', id: 618999772191843499, properties: { - r'amount': PropertySchema( - id: 0, - name: r'amount', - type: IsarType.double, - ) + r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), }, estimateSize: _budgetItemEstimateSize, serialize: _budgetItemSerialize, @@ -35,7 +31,7 @@ const BudgetItemSchema = CollectionSchema( name: r'expenseCategory', target: r'ExpenseCategory', single: true, - ) + ), }, embeddedSchemas: {}, getId: _budgetItemGetId, @@ -99,7 +95,11 @@ List> _budgetItemGetLinks(BudgetItem object) { void _budgetItemAttach(IsarCollection col, Id id, BudgetItem object) { object.id = id; object.expenseCategory.attach( - col, col.isar.collection(), r'expenseCategory', id); + col, + col.isar.collection(), + r'expenseCategory', + id, + ); } extension BudgetItemQueryWhereSort @@ -115,10 +115,7 @@ extension BudgetItemQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } @@ -144,8 +141,10 @@ extension BudgetItemQueryWhere }); } - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { + QueryBuilder idGreaterThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -153,8 +152,10 @@ extension BudgetItemQueryWhere }); } - QueryBuilder idLessThan(Id id, - {bool include = false}) { + QueryBuilder idLessThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -169,12 +170,14 @@ extension BudgetItemQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -186,11 +189,13 @@ extension BudgetItemQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -200,12 +205,14 @@ extension BudgetItemQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -215,12 +222,14 @@ extension BudgetItemQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -232,24 +241,26 @@ extension BudgetItemQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'amount', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + ), + ); }); } QueryBuilder idEqualTo( - Id value) { + Id value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } @@ -258,11 +269,13 @@ extension BudgetItemQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -271,11 +284,13 @@ extension BudgetItemQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -286,13 +301,15 @@ extension BudgetItemQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } @@ -303,14 +320,15 @@ extension BudgetItemQueryObject extension BudgetItemQueryLinks on QueryBuilder { QueryBuilder expenseCategory( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'expenseCategory'); }); } QueryBuilder - expenseCategoryIsNull() { + expenseCategoryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'expenseCategory', 0, true, 0, true); }); @@ -399,22 +417,14 @@ const BudgetSchema = CollectionSchema( name: r'includeOtherSpendings', type: IsarType.bool, ), - r'income': PropertySchema( - id: 1, - name: r'income', - type: IsarType.double, - ), - r'name': PropertySchema( - id: 2, - name: r'name', - type: IsarType.string, - ), + r'income': PropertySchema(id: 1, name: r'income', type: IsarType.double), + r'name': PropertySchema(id: 2, name: r'name', type: IsarType.string), r'period': PropertySchema( id: 3, name: r'period', type: IsarType.byte, enumMap: _BudgetperiodEnumValueMap, - ) + ), }, estimateSize: _budgetEstimateSize, serialize: _budgetSerialize, @@ -434,7 +444,7 @@ const BudgetSchema = CollectionSchema( name: r'items', target: r'BudgetItem', single: false, - ) + ), }, embeddedSchemas: {}, getId: _budgetGetId, @@ -478,7 +488,7 @@ Budget _budgetDeserialize( object.name = reader.readString(offsets[2]); object.period = _BudgetperiodValueEnumMap[reader.readByteOrNull(offsets[3])] ?? - BudgetPeriod.month; + BudgetPeriod.month; return object; } @@ -497,18 +507,15 @@ P _budgetDeserializeProp

( return (reader.readString(offset)) as P; case 3: return (_BudgetperiodValueEnumMap[reader.readByteOrNull(offset)] ?? - BudgetPeriod.month) as P; + BudgetPeriod.month) + as P; default: throw IsarError('Unknown property with id $propertyId'); } } -const _BudgetperiodEnumValueMap = { - 'month': 0, -}; -const _BudgetperiodValueEnumMap = { - 0: BudgetPeriod.month, -}; +const _BudgetperiodEnumValueMap = {'month': 0}; +const _BudgetperiodValueEnumMap = {0: BudgetPeriod.month}; Id _budgetGetId(Budget object) { return object.id; @@ -535,10 +542,7 @@ extension BudgetQueryWhereSort on QueryBuilder { extension BudgetQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } @@ -564,8 +568,10 @@ extension BudgetQueryWhere on QueryBuilder { }); } - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { + QueryBuilder idGreaterThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -573,8 +579,10 @@ extension BudgetQueryWhere on QueryBuilder { }); } - QueryBuilder idLessThan(Id id, - {bool include = false}) { + QueryBuilder idLessThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -589,12 +597,14 @@ extension BudgetQueryWhere on QueryBuilder { bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -602,10 +612,9 @@ extension BudgetQueryWhere on QueryBuilder { extension BudgetQueryFilter on QueryBuilder { QueryBuilder idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } @@ -614,11 +623,13 @@ extension BudgetQueryFilter on QueryBuilder { bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -627,11 +638,13 @@ extension BudgetQueryFilter on QueryBuilder { bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -642,23 +655,27 @@ extension BudgetQueryFilter on QueryBuilder { bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - includeOtherSpendingsEqualTo(bool value) { + includeOtherSpendingsEqualTo(bool value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'includeOtherSpendings', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'includeOtherSpendings', + value: value, + ), + ); }); } @@ -667,11 +684,13 @@ extension BudgetQueryFilter on QueryBuilder { double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'income', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'income', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -681,12 +700,14 @@ extension BudgetQueryFilter on QueryBuilder { double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'income', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'income', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -696,12 +717,14 @@ extension BudgetQueryFilter on QueryBuilder { double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'income', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'income', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -713,14 +736,16 @@ extension BudgetQueryFilter on QueryBuilder { double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'income', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'income', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + ), + ); }); } @@ -729,11 +754,13 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -743,12 +770,14 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -758,12 +787,14 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -775,14 +806,16 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } @@ -791,11 +824,13 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -804,62 +839,69 @@ extension BudgetQueryFilter on QueryBuilder { bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } - QueryBuilder nameContains(String value, - {bool caseSensitive = true}) { + QueryBuilder nameContains( + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameMatches( - String pattern, - {bool caseSensitive = true}) { + String pattern, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'name', value: ''), + ); }); } QueryBuilder nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'name', value: ''), + ); }); } QueryBuilder periodEqualTo( - BudgetPeriod value) { + BudgetPeriod value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'period', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'period', value: value), + ); }); } @@ -868,11 +910,13 @@ extension BudgetQueryFilter on QueryBuilder { bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'period', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'period', + value: value, + ), + ); }); } @@ -881,11 +925,13 @@ extension BudgetQueryFilter on QueryBuilder { bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'period', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'period', + value: value, + ), + ); }); } @@ -896,13 +942,15 @@ extension BudgetQueryFilter on QueryBuilder { bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'period', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'period', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } @@ -911,7 +959,8 @@ extension BudgetQueryObject on QueryBuilder {} extension BudgetQueryLinks on QueryBuilder { QueryBuilder account( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); @@ -924,14 +973,16 @@ extension BudgetQueryLinks on QueryBuilder { } QueryBuilder items( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'items'); }); } QueryBuilder itemsLengthEqualTo( - int length) { + int length, + ) { return QueryBuilder.apply(this, (query) { return query.linkLength(r'items', length, true, length, true); }); @@ -975,7 +1026,12 @@ extension BudgetQueryLinks on QueryBuilder { }) { return QueryBuilder.apply(this, (query) { return query.linkLength( - r'items', lower, includeLower, upper, includeUpper); + r'items', + lower, + includeLower, + upper, + includeUpper, + ); }); } } @@ -1105,8 +1161,9 @@ extension BudgetQueryWhereDistinct on QueryBuilder { }); } - QueryBuilder distinctByName( - {bool caseSensitive = true}) { + QueryBuilder distinctByName({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/expense_category.g.dart b/lib/database/collections/expense_category.g.dart index b740c75..13012af 100644 --- a/lib/database/collections/expense_category.g.dart +++ b/lib/database/collections/expense_category.g.dart @@ -17,11 +17,7 @@ const ExpenseCategorySchema = CollectionSchema( name: r'ExpenseCategory', id: -6352499903118634, properties: { - r'name': PropertySchema( - id: 0, - name: r'name', - type: IsarType.string, - ) + r'name': PropertySchema(id: 0, name: r'name', type: IsarType.string), }, estimateSize: _expenseCategoryEstimateSize, serialize: _expenseCategorySerialize, @@ -91,7 +87,10 @@ List> _expenseCategoryGetLinks(ExpenseCategory object) { } void _expenseCategoryAttach( - IsarCollection col, Id id, ExpenseCategory object) { + IsarCollection col, + Id id, + ExpenseCategory object, +) { object.id = id; } @@ -107,17 +106,15 @@ extension ExpenseCategoryQueryWhereSort extension ExpenseCategoryQueryWhere on QueryBuilder { QueryBuilder idEqualTo( - Id id) { + Id id, + ) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -140,7 +137,7 @@ extension ExpenseCategoryQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -149,8 +146,9 @@ extension ExpenseCategoryQueryWhere } QueryBuilder idLessThan( - Id id, - {bool include = false}) { + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -165,12 +163,14 @@ extension ExpenseCategoryQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -178,109 +178,111 @@ extension ExpenseCategoryQueryWhere extension ExpenseCategoryQueryFilter on QueryBuilder { QueryBuilder - idEqualTo(Id value) { + idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } QueryBuilder - idGreaterThan( - Id value, { - bool include = false, - }) { + idGreaterThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idLessThan( - Id value, { - bool include = false, - }) { + idLessThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idBetween( + idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - nameEqualTo( - String value, { - bool caseSensitive = true, - }) { + nameEqualTo(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameGreaterThan( + nameGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameLessThan( + nameLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameBetween( + nameBetween( String lower, String upper, { bool includeLower = true, @@ -288,84 +290,86 @@ extension ExpenseCategoryQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'name', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'name', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameStartsWith( - String value, { - bool caseSensitive = true, - }) { + nameStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameEndsWith( - String value, { - bool caseSensitive = true, - }) { + nameEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { + nameContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { + nameMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameIsEmpty() { + nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'name', value: ''), + ); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'name', value: ''), + ); }); } } @@ -385,7 +389,7 @@ extension ExpenseCategoryQuerySortBy } QueryBuilder - sortByNameDesc() { + sortByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); @@ -413,7 +417,7 @@ extension ExpenseCategoryQuerySortThenBy } QueryBuilder - thenByNameDesc() { + thenByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); @@ -422,8 +426,9 @@ extension ExpenseCategoryQuerySortThenBy extension ExpenseCategoryQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByName( - {bool caseSensitive = true}) { + QueryBuilder distinctByName({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); diff --git a/lib/database/collections/recurrent.g.dart b/lib/database/collections/recurrent.g.dart index 77408c6..c587bc5 100644 --- a/lib/database/collections/recurrent.g.dart +++ b/lib/database/collections/recurrent.g.dart @@ -18,16 +18,12 @@ const RecurringTransactionSchema = CollectionSchema( name: r'RecurringTransaction', id: 969840479390105118, properties: { - r'days': PropertySchema( - id: 0, - name: r'days', - type: IsarType.long, - ), + r'days': PropertySchema(id: 0, name: r'days', type: IsarType.long), r'lastExecution': PropertySchema( id: 1, name: r'lastExecution', type: IsarType.dateTime, - ) + ), }, estimateSize: _recurringTransactionEstimateSize, serialize: _recurringTransactionSerialize, @@ -47,7 +43,7 @@ const RecurringTransactionSchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ) + ), }, embeddedSchemas: {}, getId: _recurringTransactionGetId, @@ -109,22 +105,30 @@ Id _recurringTransactionGetId(RecurringTransaction object) { } List> _recurringTransactionGetLinks( - RecurringTransaction object) { + RecurringTransaction object, +) { return [object.template, object.account]; } void _recurringTransactionAttach( - IsarCollection col, Id id, RecurringTransaction object) { + IsarCollection col, + Id id, + RecurringTransaction object, +) { object.id = id; - object.template - .attach(col, col.isar.collection(), r'template', id); + object.template.attach( + col, + col.isar.collection(), + r'template', + id, + ); object.account.attach(col, col.isar.collection(), r'account', id); } extension RecurringTransactionQueryWhereSort on QueryBuilder { QueryBuilder - anyId() { + anyId() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); @@ -134,17 +138,14 @@ extension RecurringTransactionQueryWhereSort extension RecurringTransactionQueryWhere on QueryBuilder { QueryBuilder - idEqualTo(Id id) { + idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -167,7 +168,7 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -176,7 +177,7 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idLessThan(Id id, {bool include = false}) { + idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -185,240 +186,326 @@ extension RecurringTransactionQueryWhere } QueryBuilder - idBetween( + idBetween( Id lowerId, Id upperId, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } -extension RecurringTransactionQueryFilter on QueryBuilder { - QueryBuilder daysEqualTo(int value) { +extension RecurringTransactionQueryFilter + on + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QFilterCondition + > { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + daysEqualTo(int value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'days', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'days', value: value), + ); }); } - QueryBuilder daysGreaterThan( - int value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + daysGreaterThan(int value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'days', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'days', + value: value, + ), + ); }); } - QueryBuilder daysLessThan( - int value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + daysLessThan(int value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'days', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'days', + value: value, + ), + ); }); } - QueryBuilder daysBetween( + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + daysBetween( int lower, int upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'days', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'days', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } - QueryBuilder idEqualTo(Id value) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } - QueryBuilder idGreaterThan( - Id value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + idGreaterThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } - QueryBuilder idLessThan( - Id value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + idLessThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } - QueryBuilder idBetween( + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } - QueryBuilder lastExecutionIsNull() { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'lastExecution', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'lastExecution'), + ); }); } - QueryBuilder lastExecutionIsNotNull() { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'lastExecution', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'lastExecution'), + ); }); } - QueryBuilder lastExecutionEqualTo(DateTime? value) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionEqualTo(DateTime? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'lastExecution', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'lastExecution', value: value), + ); }); } - QueryBuilder lastExecutionGreaterThan( - DateTime? value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionGreaterThan(DateTime? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'lastExecution', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'lastExecution', + value: value, + ), + ); }); } - QueryBuilder lastExecutionLessThan( - DateTime? value, { - bool include = false, - }) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionLessThan(DateTime? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'lastExecution', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'lastExecution', + value: value, + ), + ); }); } - QueryBuilder lastExecutionBetween( + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + lastExecutionBetween( DateTime? lower, DateTime? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'lastExecution', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'lastExecution', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } -extension RecurringTransactionQueryObject on QueryBuilder {} +extension RecurringTransactionQueryObject + on + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QFilterCondition + > {} -extension RecurringTransactionQueryLinks on QueryBuilder { - QueryBuilder template(FilterQuery q) { +extension RecurringTransactionQueryLinks + on + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QFilterCondition + > { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + template(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'template'); }); } - QueryBuilder templateIsNull() { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + templateIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'template', 0, true, 0, true); }); } - QueryBuilder account(FilterQuery q) { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + account(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } - QueryBuilder accountIsNull() { + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QAfterFilterCondition + > + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -428,28 +515,28 @@ extension RecurringTransactionQueryLinks on QueryBuilder { QueryBuilder - sortByDays() { + sortByDays() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.asc); }); } QueryBuilder - sortByDaysDesc() { + sortByDaysDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.desc); }); } QueryBuilder - sortByLastExecution() { + sortByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.asc); }); } QueryBuilder - sortByLastExecutionDesc() { + sortByLastExecutionDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.desc); }); @@ -459,42 +546,42 @@ extension RecurringTransactionQuerySortBy extension RecurringTransactionQuerySortThenBy on QueryBuilder { QueryBuilder - thenByDays() { + thenByDays() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.asc); }); } QueryBuilder - thenByDaysDesc() { + thenByDaysDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'days', Sort.desc); }); } QueryBuilder - thenById() { + thenById() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.asc); }); } QueryBuilder - thenByIdDesc() { + thenByIdDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.desc); }); } QueryBuilder - thenByLastExecution() { + thenByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.asc); }); } QueryBuilder - thenByLastExecutionDesc() { + thenByLastExecutionDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'lastExecution', Sort.desc); }); @@ -504,22 +591,27 @@ extension RecurringTransactionQuerySortThenBy extension RecurringTransactionQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByDays() { + distinctByDays() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'days'); }); } QueryBuilder - distinctByLastExecution() { + distinctByLastExecution() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'lastExecution'); }); } } -extension RecurringTransactionQueryProperty on QueryBuilder< - RecurringTransaction, RecurringTransaction, QQueryProperty> { +extension RecurringTransactionQueryProperty + on + QueryBuilder< + RecurringTransaction, + RecurringTransaction, + QQueryProperty + > { QueryBuilder idProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'id'); @@ -533,7 +625,7 @@ extension RecurringTransactionQueryProperty on QueryBuilder< } QueryBuilder - lastExecutionProperty() { + lastExecutionProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'lastExecution'); }); diff --git a/lib/database/collections/template.g.dart b/lib/database/collections/template.g.dart index 96a643e..99b6524 100644 --- a/lib/database/collections/template.g.dart +++ b/lib/database/collections/template.g.dart @@ -18,21 +18,13 @@ const TransactionTemplateSchema = CollectionSchema( name: r'TransactionTemplate', id: -2324989530163310644, properties: { - r'amount': PropertySchema( - id: 0, - name: r'amount', - type: IsarType.double, - ), - r'name': PropertySchema( - id: 1, - name: r'name', - type: IsarType.string, - ), + r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), + r'name': PropertySchema(id: 1, name: r'name', type: IsarType.string), r'recurring': PropertySchema( id: 2, name: r'recurring', type: IsarType.bool, - ) + ), }, estimateSize: _transactionTemplateEstimateSize, serialize: _transactionTemplateSerialize, @@ -58,7 +50,7 @@ const TransactionTemplateSchema = CollectionSchema( name: r'account', target: r'Account', single: true, - ) + ), }, embeddedSchemas: {}, getId: _transactionTemplateGetId, @@ -125,17 +117,29 @@ Id _transactionTemplateGetId(TransactionTemplate object) { } List> _transactionTemplateGetLinks( - TransactionTemplate object) { + TransactionTemplate object, +) { return [object.expenseCategory, object.beneficiary, object.account]; } void _transactionTemplateAttach( - IsarCollection col, Id id, TransactionTemplate object) { + IsarCollection col, + Id id, + TransactionTemplate object, +) { object.id = id; object.expenseCategory.attach( - col, col.isar.collection(), r'expenseCategory', id); - object.beneficiary - .attach(col, col.isar.collection(), r'beneficiary', id); + col, + col.isar.collection(), + r'expenseCategory', + id, + ); + object.beneficiary.attach( + col, + col.isar.collection(), + r'beneficiary', + id, + ); object.account.attach(col, col.isar.collection(), r'account', id); } @@ -151,17 +155,14 @@ extension TransactionTemplateQueryWhereSort extension TransactionTemplateQueryWhere on QueryBuilder { QueryBuilder - idEqualTo(Id id) { + idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -184,7 +185,7 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -193,7 +194,7 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idLessThan(Id id, {bool include = false}) { + idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -202,73 +203,83 @@ extension TransactionTemplateQueryWhere } QueryBuilder - idBetween( + idBetween( Id lowerId, Id upperId, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } -extension TransactionTemplateQueryFilter on QueryBuilder { +extension TransactionTemplateQueryFilter + on + QueryBuilder< + TransactionTemplate, + TransactionTemplate, + QFilterCondition + > { QueryBuilder - amountEqualTo( - double value, { - double epsilon = Query.epsilon, - }) { + amountEqualTo(double value, {double epsilon = Query.epsilon}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } QueryBuilder - amountGreaterThan( + amountGreaterThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } QueryBuilder - amountLessThan( + amountLessThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } QueryBuilder - amountBetween( + amountBetween( double lower, double upper, { bool includeLower = true, @@ -276,121 +287,125 @@ extension TransactionTemplateQueryFilter on QueryBuilder - idEqualTo(Id value) { + idEqualTo(Id value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } QueryBuilder - idGreaterThan( - Id value, { - bool include = false, - }) { + idGreaterThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idLessThan( - Id value, { - bool include = false, - }) { + idLessThan(Id value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idBetween( + idBetween( Id lower, Id upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - nameEqualTo( - String value, { - bool caseSensitive = true, - }) { + nameEqualTo(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameGreaterThan( + nameGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameLessThan( + nameLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameBetween( + nameBetween( String lower, String upper, { bool includeLower = true, @@ -398,140 +413,151 @@ extension TransactionTemplateQueryFilter on QueryBuilder - nameStartsWith( - String value, { - bool caseSensitive = true, - }) { + nameStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameEndsWith( - String value, { - bool caseSensitive = true, - }) { + nameEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameContains(String value, {bool caseSensitive = true}) { + nameContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'name', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'name', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameMatches(String pattern, {bool caseSensitive = true}) { + nameMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'name', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'name', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - nameIsEmpty() { + nameIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'name', value: ''), + ); }); } QueryBuilder - nameIsNotEmpty() { + nameIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'name', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'name', value: ''), + ); }); } QueryBuilder - recurringEqualTo(bool value) { + recurringEqualTo(bool value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'recurring', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'recurring', value: value), + ); }); } } -extension TransactionTemplateQueryObject on QueryBuilder {} +extension TransactionTemplateQueryObject + on + QueryBuilder< + TransactionTemplate, + TransactionTemplate, + QFilterCondition + > {} -extension TransactionTemplateQueryLinks on QueryBuilder { +extension TransactionTemplateQueryLinks + on + QueryBuilder< + TransactionTemplate, + TransactionTemplate, + QFilterCondition + > { QueryBuilder - expenseCategory(FilterQuery q) { + expenseCategory(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'expenseCategory'); }); } QueryBuilder - expenseCategoryIsNull() { + expenseCategoryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'expenseCategory', 0, true, 0, true); }); } QueryBuilder - beneficiary(FilterQuery q) { + beneficiary(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'beneficiary'); }); } QueryBuilder - beneficiaryIsNull() { + beneficiaryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'beneficiary', 0, true, 0, true); }); } QueryBuilder - account(FilterQuery q) { + account(FilterQuery q) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); @@ -541,42 +567,42 @@ extension TransactionTemplateQueryLinks on QueryBuilder { QueryBuilder - sortByAmount() { + sortByAmount() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.asc); }); } QueryBuilder - sortByAmountDesc() { + sortByAmountDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.desc); }); } QueryBuilder - sortByName() { + sortByName() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.asc); }); } QueryBuilder - sortByNameDesc() { + sortByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); } QueryBuilder - sortByRecurring() { + sortByRecurring() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.asc); }); } QueryBuilder - sortByRecurringDesc() { + sortByRecurringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.desc); }); @@ -586,56 +612,56 @@ extension TransactionTemplateQuerySortBy extension TransactionTemplateQuerySortThenBy on QueryBuilder { QueryBuilder - thenByAmount() { + thenByAmount() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.asc); }); } QueryBuilder - thenByAmountDesc() { + thenByAmountDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'amount', Sort.desc); }); } QueryBuilder - thenById() { + thenById() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.asc); }); } QueryBuilder - thenByIdDesc() { + thenByIdDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.desc); }); } QueryBuilder - thenByName() { + thenByName() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.asc); }); } QueryBuilder - thenByNameDesc() { + thenByNameDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'name', Sort.desc); }); } QueryBuilder - thenByRecurring() { + thenByRecurring() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.asc); }); } QueryBuilder - thenByRecurringDesc() { + thenByRecurringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'recurring', Sort.desc); }); @@ -645,21 +671,21 @@ extension TransactionTemplateQuerySortThenBy extension TransactionTemplateQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByAmount() { + distinctByAmount() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'amount'); }); } QueryBuilder - distinctByName({bool caseSensitive = true}) { + distinctByName({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'name', caseSensitive: caseSensitive); }); } QueryBuilder - distinctByRecurring() { + distinctByRecurring() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'recurring'); }); @@ -687,7 +713,7 @@ extension TransactionTemplateQueryProperty } QueryBuilder - recurringProperty() { + recurringProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'recurring'); }); diff --git a/lib/database/collections/transaction.g.dart b/lib/database/collections/transaction.g.dart index 38a53da..491ba9c 100644 --- a/lib/database/collections/transaction.g.dart +++ b/lib/database/collections/transaction.g.dart @@ -17,21 +17,9 @@ const TransactionSchema = CollectionSchema( name: r'Transaction', id: 5320225499417954855, properties: { - r'amount': PropertySchema( - id: 0, - name: r'amount', - type: IsarType.double, - ), - r'date': PropertySchema( - id: 1, - name: r'date', - type: IsarType.dateTime, - ), - r'tags': PropertySchema( - id: 2, - name: r'tags', - type: IsarType.stringList, - ) + r'amount': PropertySchema(id: 0, name: r'amount', type: IsarType.double), + r'date': PropertySchema(id: 1, name: r'date', type: IsarType.dateTime), + r'tags': PropertySchema(id: 2, name: r'tags', type: IsarType.stringList), }, estimateSize: _transactionEstimateSize, serialize: _transactionSerialize, @@ -57,7 +45,7 @@ const TransactionSchema = CollectionSchema( name: r'beneficiary', target: r'Beneficiary', single: true, - ) + ), }, embeddedSchemas: {}, getId: _transactionGetId, @@ -134,13 +122,24 @@ List> _transactionGetLinks(Transaction object) { } void _transactionAttach( - IsarCollection col, Id id, Transaction object) { + IsarCollection col, + Id id, + Transaction object, +) { object.id = id; object.expenseCategory.attach( - col, col.isar.collection(), r'expenseCategory', id); + col, + col.isar.collection(), + r'expenseCategory', + id, + ); object.account.attach(col, col.isar.collection(), r'account', id); - object.beneficiary - .attach(col, col.isar.collection(), r'beneficiary', id); + object.beneficiary.attach( + col, + col.isar.collection(), + r'beneficiary', + id, + ); } extension TransactionQueryWhereSort @@ -156,15 +155,13 @@ extension TransactionQueryWhere on QueryBuilder { QueryBuilder idEqualTo(Id id) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder idNotEqualTo( - Id id) { + Id id, + ) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -186,8 +183,10 @@ extension TransactionQueryWhere }); } - QueryBuilder idGreaterThan(Id id, - {bool include = false}) { + QueryBuilder idGreaterThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -195,8 +194,10 @@ extension TransactionQueryWhere }); } - QueryBuilder idLessThan(Id id, - {bool include = false}) { + QueryBuilder idLessThan( + Id id, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -211,12 +212,14 @@ extension TransactionQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -228,27 +231,31 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } QueryBuilder - amountGreaterThan( + amountGreaterThan( double value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -258,12 +265,14 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'amount', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'amount', + value: value, + epsilon: epsilon, + ), + ); }); } @@ -275,24 +284,26 @@ extension TransactionQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'amount', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'amount', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + epsilon: epsilon, + ), + ); }); } QueryBuilder dateEqualTo( - DateTime value) { + DateTime value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'date', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'date', value: value), + ); }); } @@ -301,11 +312,13 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'date', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'date', + value: value, + ), + ); }); } @@ -314,11 +327,13 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'date', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'date', + value: value, + ), + ); }); } @@ -329,23 +344,25 @@ extension TransactionQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'date', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'date', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder idEqualTo( - Id value) { + Id value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } @@ -354,11 +371,13 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -367,11 +386,13 @@ extension TransactionQueryFilter bool include = false, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } @@ -382,64 +403,69 @@ extension TransactionQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - tagsElementEqualTo( - String value, { - bool caseSensitive = true, - }) { + tagsElementEqualTo(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - tagsElementGreaterThan( + tagsElementGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - tagsElementLessThan( + tagsElementLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - tagsElementBetween( + tagsElementBetween( String lower, String upper, { bool includeLower = true, @@ -447,159 +473,125 @@ extension TransactionQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'tags', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - tagsElementStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - tagsElementEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - tagsElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'tags', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - tagsElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'tags', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - tagsElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'tags', - value: '', - )); - }); - } - - QueryBuilder - tagsElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'tags', - value: '', - )); - }); - } - - QueryBuilder - tagsLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - length, - true, - length, - true, + return query.addFilterCondition( + FilterCondition.between( + property: r'tags', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), ); }); } + QueryBuilder + tagsElementStartsWith(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder + tagsElementEndsWith(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder + tagsElementContains(String value, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.contains( + property: r'tags', + value: value, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder + tagsElementMatches(String pattern, {bool caseSensitive = true}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.matches( + property: r'tags', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); + }); + } + + QueryBuilder + tagsElementIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.equalTo(property: r'tags', value: ''), + ); + }); + } + + QueryBuilder + tagsElementIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'tags', value: ''), + ); + }); + } + + QueryBuilder + tagsLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'tags', length, true, length, true); + }); + } + QueryBuilder tagsIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - 0, - true, - 0, - true, - ); + return query.listLength(r'tags', 0, true, 0, true); }); } QueryBuilder - tagsIsNotEmpty() { + tagsIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - 0, - false, - 999999, - true, - ); + return query.listLength(r'tags', 0, false, 999999, true); }); } QueryBuilder - tagsLengthLessThan( - int length, { - bool include = false, - }) { + tagsLengthLessThan(int length, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - 0, - true, - length, - include, - ); + return query.listLength(r'tags', 0, true, length, include); }); } QueryBuilder - tagsLengthGreaterThan( - int length, { - bool include = false, - }) { + tagsLengthGreaterThan(int length, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'tags', - length, - include, - 999999, - true, - ); + return query.listLength(r'tags', length, include, 999999, true); }); } QueryBuilder - tagsLengthBetween( + tagsLengthBetween( int lower, int upper, { bool includeLower = true, @@ -623,42 +615,45 @@ extension TransactionQueryObject extension TransactionQueryLinks on QueryBuilder { QueryBuilder expenseCategory( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'expenseCategory'); }); } QueryBuilder - expenseCategoryIsNull() { + expenseCategoryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'expenseCategory', 0, true, 0, true); }); } QueryBuilder account( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'account'); }); } QueryBuilder - accountIsNull() { + accountIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'account', 0, true, 0, true); }); } QueryBuilder beneficiary( - FilterQuery q) { + FilterQuery q, + ) { return QueryBuilder.apply(this, (query) { return query.link(q, r'beneficiary'); }); } QueryBuilder - beneficiaryIsNull() { + beneficiaryIsNull() { return QueryBuilder.apply(this, (query) { return query.linkLength(r'beneficiary', 0, true, 0, true); }); diff --git a/lib/database/database.dart b/lib/database/database.dart index d30e5c1..bc5cc36 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -211,7 +211,12 @@ Stream watchExpenseCategory() { } Stream watchBudgets(Account account) { - return GetIt.I.get().budgets.filter().account((q) => q.idEqualTo(account.id)).watchLazy(fireImmediately: true); + return GetIt.I + .get() + .budgets + .filter() + .account((q) => q.idEqualTo(account.id)) + .watchLazy(fireImmediately: true); } Future> getBudgets(Account? account) { @@ -219,7 +224,12 @@ Future> getBudgets(Account? account) { return Future.value([]); } - return GetIt.I.get().budgets.filter().account((q) => q.idEqualTo(account.id)).findAll(); + return GetIt.I + .get() + .budgets + .filter() + .account((q) => q.idEqualTo(account.id)) + .findAll(); } Future upsertBudget(Budget budget) { @@ -239,11 +249,13 @@ Future upsertBudgetItem(BudgetItem item) { }); } -enum TransactionQueryDateOption { - thisMonth, -} +enum TransactionQueryDateOption { thisMonth } -Future> getTransactionsInTimeframe(Account account, DateTime today, TransactionQueryDateOption option) async { +Future> getTransactionsInTimeframe( + Account account, + DateTime today, + TransactionQueryDateOption option, +) async { final lower = switch (option) { TransactionQueryDateOption.thisMonth => DateTime( today.year, @@ -255,10 +267,11 @@ Future> getTransactionsInTimeframe(Account account, DateTime t TransactionQueryDateOption.thisMonth => monthEnding(today), }; - return GetIt.I.get() + return GetIt.I + .get() .transactions .filter() .account((q) => q.idEqualTo(account.id)) .dateBetween(lower, upper) .findAll(); -} \ No newline at end of file +} diff --git a/lib/ui/navigation.dart b/lib/ui/navigation.dart index 66c218e..6d5f2b9 100644 --- a/lib/ui/navigation.dart +++ b/lib/ui/navigation.dart @@ -195,7 +195,8 @@ class OkaneNavigationLayout extends StatelessWidget { }, ), - if (p.showAccountName && state.activeAccountIndex != null) + if (p.showAccountName && + state.activeAccountIndex != null) Padding( padding: EdgeInsets.only(left: 8), child: Text( @@ -218,7 +219,8 @@ class OkaneNavigationLayout extends StatelessWidget { ), ScreenSize.normal => Column( children: [ - if (p.showAccountName && state.activeAccountIndex != null) + if (p.showAccountName && + state.activeAccountIndex != null) AccountIndicator( accountName: state diff --git a/lib/ui/pages/account/account.dart b/lib/ui/pages/account/account.dart index fdff884..6305366 100644 --- a/lib/ui/pages/account/account.dart +++ b/lib/ui/pages/account/account.dart @@ -9,6 +9,8 @@ import 'package:okane/ui/pages/account/total_balance_card.dart'; import 'package:okane/ui/pages/account/upcoming_transactions_card.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; +import 'package:okane/ui/widgets/piechart.dart'; +import 'package:okane/ui/widgets/piechart_card.dart'; class AccountListPage extends StatefulWidget { final bool isPage; @@ -102,18 +104,25 @@ class AccountListPageState extends State { ), Padding( - padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8), child: TotalBalanceCard(), ), Padding( - padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8), child: UpcomingTransactionsCard(), ), - - Row( + Wrap( children: [ - Padding(padding: EdgeInsets.all(16), child: BreakdownCard()), + Padding( + padding: EdgeInsets.all(8), + //child: BreakdownCard(), + child: PieChartCard( + titleText: "Spending Breakdown", + fallbackText: "No spending available", + items: [], + ), + ), ], ), ], diff --git a/lib/ui/pages/account/breakdown_card.dart b/lib/ui/pages/account/breakdown_card.dart index 9c90161..85e3dad 100644 --- a/lib/ui/pages/account/breakdown_card.dart +++ b/lib/ui/pages/account/breakdown_card.dart @@ -8,6 +8,8 @@ import 'package:okane/database/collections/transaction.dart'; import 'package:okane/database/database.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; +import 'package:okane/ui/widgets/piechart.dart'; +import 'package:okane/ui/widgets/piechart_card.dart'; const CATEGORY_INCOME = "Income"; const CATEGORY_OTHER = "Other"; @@ -71,101 +73,126 @@ class BreakdownCard extends StatelessWidget { return (expenses: expenses, colors: colors, usable: usableMoney); } + Widget _buildCard(Widget child, String? subtitle) { + return ResponsiveCard( + titleText: "Expense Breakdown", + subtitleText: subtitle, + child: child, + ); + } + + Widget _buildCenterText(String text) { + return _buildCard(Center(child: Text(text)), null); + } + @override Widget build(BuildContext context) { final bloc = GetIt.I.get(); - return Card( - child: Padding( - padding: const EdgeInsets.all(8), - child: BlocBuilder( - builder: (context, state) { - if (bloc.activeAccount == null) { - return Text("No active account"); + return BlocBuilder( + builder: (context, state) { + if (bloc.activeAccount == null) { + return _buildCenterText("No account active"); + } + + return FutureBuilder( + future: getLastTransactions(bloc.activeAccount!, DateTime.now(), 30), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return _buildCard( + Padding( + padding: EdgeInsets.all(16), + child: SizedBox( + width: 150 - 16 * 2, + height: 150 - 16 * 2, + child: CircularProgressIndicator(), + ), + ), + null, + ); } - return FutureBuilder( - future: getLastTransactions( - bloc.activeAccount!, - DateTime.now(), - 30, - ), - builder: (context, snapshot) { - final title = Padding( - padding: EdgeInsets.only(bottom: 16), - child: Text("Expense Breakdown"), - ); - if (!snapshot.hasData) { - return Column(children: [title, CircularProgressIndicator()]); - } - - if (snapshot.data!.isEmpty) { - return Column(children: [title, Text("No transactions")]); - } - - final data = _computeSections(snapshot.data!); - final sectionData = - data.expenses.entries - .map( - (entry) => PieChartSectionData( - value: entry.value, - title: formatCurrency(entry.value, precise: false), - titleStyle: TextStyle(fontWeight: FontWeight.bold), - radius: 40, - color: data.colors[entry.key]!, - ), - ) - .toList(); - return Column( - children: [ - title, - Row( - children: [ - SizedBox( - width: 150, - height: 150, - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - borderData: FlBorderData(show: false), - sectionsSpace: 0, - centerSpaceRadius: 35, - sections: sectionData, - ), - ), - ), - ), - - Padding( - padding: EdgeInsets.only(left: 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: - data.expenses.keys - .map( - (key) => LegendItem( - text: key, - color: data.colors[key]!, - ), - ) - .toList(), - ), - ), - ], - ), - - Padding( - padding: EdgeInsets.only(top: 16), - child: Text( - "Available money: ${formatCurrency(data.usable)}", + final data = _computeSections(snapshot.data!); + final sectionData = + data.expenses.entries + .map( + (entry) => PieChartSectionData( + value: entry.value, + title: formatCurrency(entry.value, precise: false), + titleStyle: TextStyle(fontWeight: FontWeight.bold), + radius: 40, + color: data.colors[entry.key]!, ), - ), - ], - ); - }, + ) + .toList(); + if (sectionData.isEmpty) { + return _buildCenterText("No expenses available"); + } + return OkanePieChart( + items: + data.expenses.entries + .map( + (e) => ( + title: e.key, + value: e.value, + color: colorHash(e.key), + ), + ) + .toList(), ); }, - ), + ); + }, + ); + return ResponsiveCard( + titleText: "Expense Breakdown", + child: BlocBuilder( + builder: (context, state) { + if (bloc.activeAccount == null) { + return Text("No active account"); + } + + return FutureBuilder( + future: getLastTransactions( + bloc.activeAccount!, + DateTime.now(), + 30, + ), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return CircularProgressIndicator(); + } + + final data = _computeSections(snapshot.data!); + final sectionData = + data.expenses.entries + .map( + (entry) => PieChartSectionData( + value: entry.value, + title: formatCurrency(entry.value, precise: false), + titleStyle: TextStyle(fontWeight: FontWeight.bold), + radius: 40, + color: data.colors[entry.key]!, + ), + ) + .toList(); + if (sectionData.isEmpty) { + return Center(child: Text("No expenses")); + } + return OkanePieChart( + items: + data.expenses.entries + .map( + (e) => ( + title: e.key, + value: e.value, + color: colorHash(e.key), + ), + ) + .toList(), + ); + }, + ); + }, ), ); } diff --git a/lib/ui/pages/account/total_balance_card.dart b/lib/ui/pages/account/total_balance_card.dart index 73741a4..8cdbc66 100644 --- a/lib/ui/pages/account/total_balance_card.dart +++ b/lib/ui/pages/account/total_balance_card.dart @@ -29,7 +29,7 @@ class TotalBalanceCard extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Text( - "Total balance", + "Total balance", style: Theme.of(context).textTheme.titleLarge, ), FutureBuilder( diff --git a/lib/ui/pages/budgets/add_budget.dart b/lib/ui/pages/budgets/add_budget.dart index 5c0e0a9..39cad06 100644 --- a/lib/ui/pages/budgets/add_budget.dart +++ b/lib/ui/pages/budgets/add_budget.dart @@ -23,44 +23,45 @@ class AddBudgetState extends State { mainAxisSize: MainAxisSize.min, children: [ TextField( - decoration: InputDecoration( - hintText: "Budget name", - ), + decoration: InputDecoration(hintText: "Budget name"), controller: _budgetNameEditController, ), TextField( - decoration: InputDecoration( - hintText: "Income", - ), + decoration: InputDecoration(hintText: "Income"), controller: _budgetIncomeEditController, - keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), + keyboardType: TextInputType.numberWithOptions( + signed: false, + decimal: true, + ), ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ OutlinedButton( - onPressed: () async { - if (_budgetNameEditController.text.isEmpty || _budgetIncomeEditController.text.isEmpty) { - return; - } + onPressed: () async { + if (_budgetNameEditController.text.isEmpty || + _budgetIncomeEditController.text.isEmpty) { + return; + } - final bloc = GetIt.I.get(); - final budget = Budget() - ..name = _budgetNameEditController.text - ..period = BudgetPeriod.month - ..includeOtherSpendings = false - ..income = double.parse(_budgetIncomeEditController.text) - ..account.value = bloc.activeAccount!; - await upsertBudget(budget); - widget.onDone(); - }, - child: Text("Add"), + final bloc = GetIt.I.get(); + final budget = + Budget() + ..name = _budgetNameEditController.text + ..period = BudgetPeriod.month + ..includeOtherSpendings = false + ..income = double.parse(_budgetIncomeEditController.text) + ..account.value = bloc.activeAccount!; + await upsertBudget(budget); + widget.onDone(); + }, + child: Text("Add"), ), ], ), ], ); } -} \ No newline at end of file +} diff --git a/lib/ui/pages/budgets/add_budget_item.dart b/lib/ui/pages/budgets/add_budget_item.dart index c959f19..cf103c4 100644 --- a/lib/ui/pages/budgets/add_budget_item.dart +++ b/lib/ui/pages/budgets/add_budget_item.dart @@ -11,7 +11,11 @@ class AddBudgetItemPopup extends StatefulWidget { final VoidCallback onDone; final Budget budget; - const AddBudgetItemPopup({super.key, required this.onDone, required this.budget}); + const AddBudgetItemPopup({ + super.key, + required this.onDone, + required this.budget, + }); @override AddBudgetItemState createState() => AddBudgetItemState(); @@ -31,55 +35,67 @@ class AddBudgetItemState extends State { Text("Expense category"), OutlinedButton( - onPressed: () async { - final category = await showDialogOrModal( - context: context, - builder: (_) => AddExpenseCategory(), - ); - if (category == null) { - return; - } + onPressed: () async { + final category = await showDialogOrModal( + context: context, + builder: (_) => AddExpenseCategory(), + ); + if (category == null) { + return; + } - setState(() => _expenseCategory = category); - }, - child: Text(_expenseCategory?.name ?? "None"), + setState(() => _expenseCategory = category); + }, + child: Text(_expenseCategory?.name ?? "None"), ), ], ), TextField( - decoration: InputDecoration( - hintText: "Amount", - ), + decoration: InputDecoration(hintText: "Amount"), controller: _budgetItemAmountEditController, - keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), + keyboardType: TextInputType.numberWithOptions( + signed: false, + decimal: true, + ), ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ OutlinedButton( - onPressed: () async { - if (_budgetItemAmountEditController.text.isEmpty || _expenseCategory == null) { - return; - } - if (widget.budget.items.where((i) => i.expenseCategory.value!.name == _expenseCategory!.name).firstOrNull != null) { - return; - } + onPressed: () async { + if (_budgetItemAmountEditController.text.isEmpty || + _expenseCategory == null) { + return; + } + if (widget.budget.items + .where( + (i) => + i.expenseCategory.value!.name == + _expenseCategory!.name, + ) + .firstOrNull != + null) { + return; + } - final item = BudgetItem() - ..expenseCategory.value = _expenseCategory - ..amount = double.parse(_budgetItemAmountEditController.text); - await upsertBudgetItem(item); - widget.budget.items.add(item); - await upsertBudget(widget.budget); - widget.onDone(); - }, - child: Text("Add"), + final item = + BudgetItem() + ..expenseCategory.value = _expenseCategory + ..amount = double.parse( + _budgetItemAmountEditController.text, + ); + await upsertBudgetItem(item); + widget.budget.items.add(item); + await upsertBudget(widget.budget); + widget.onDone(); + }, + child: Text("Add"), ), ], ), ], ); } -} \ No newline at end of file +} diff --git a/lib/ui/pages/budgets/budget_details.dart b/lib/ui/pages/budgets/budget_details.dart index 46b84d2..ad84e17 100644 --- a/lib/ui/pages/budgets/budget_details.dart +++ b/lib/ui/pages/budgets/budget_details.dart @@ -8,6 +8,8 @@ import 'package:okane/ui/pages/account/breakdown_card.dart'; import 'package:okane/ui/pages/budgets/add_budget_item.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; +import 'package:okane/ui/widgets/piechart.dart'; +import 'package:okane/ui/widgets/piechart_card.dart'; class BudgetDetailsPage extends StatelessWidget { final bool isPage; @@ -256,211 +258,48 @@ class BudgetDetailsPage extends StatelessWidget { ), Wrap( - children: [ - Padding( - padding: EdgeInsets.all(8), - child: SizedBox( - child: Card( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(top: 8), - child: Text( - "Budget breakdown", - style: - Theme.of( - context, - ).textTheme.titleLarge, - textAlign: TextAlign.center, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 8), + child: PieChartCard( + fallbackText: "", + valueConverter: formatCurrency, + items: + state.activeBudget!.items + .map( + (i) => ( + title: i.expenseCategory.value!.name, + value: i.amount, + color: colorHash( + i.expenseCategory.value!.name, + ), ), - ), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsets.all(16), - child: SizedBox( - width: 150, - height: 150, - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - borderData: FlBorderData( - show: false, - ), - sectionsSpace: 0, - centerSpaceRadius: 35, - sections: - state - .activeBudget! - .items - .map( - ( - i, - ) => PieChartSectionData( - value: - i.amount - .abs(), - title: - formatCurrency( - i.amount - .abs(), - ), - titleStyle: TextStyle( - fontWeight: - FontWeight - .bold, - ), - radius: 40, - color: colorHash( - i - .expenseCategory - .value! - .name, - ), - ), - ) - .toList(), - ), - ), - ), - ), - ), - - Padding( - padding: EdgeInsets.symmetric( - horizontal: 8, - ), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: - state.activeBudget!.items - .map( - (i) => LegendItem( - text: - i - .expenseCategory - .value! - .name, - color: colorHash( - i - .expenseCategory - .value! - .name, - ), - ), - ) - .toList(), - ), - ), - ], - ), - ], - ), - ), - ), + ) + .toList(), + titleText: "Budget breakdown", ), + ), - Padding( - padding: EdgeInsets.all(8), - child: SizedBox( - child: Card( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(top: 8), - child: Text( - "Spending breakdown", - style: - Theme.of( - context, - ).textTheme.titleLarge, - textAlign: TextAlign.center, + Padding( + padding: EdgeInsets.symmetric(horizontal: 8), + child: PieChartCard( + fallbackText: "No spending available", + valueConverter: formatCurrency, + items: + spending.entries + .map( + (e) => ( + title: e.key, + value: e.value.abs(), + color: colorHash(e.key), ), - ), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsets.all(16), - child: SizedBox( - width: 150, - height: 150, - child: AspectRatio( - aspectRatio: 1, - child: PieChart( - PieChartData( - borderData: FlBorderData( - show: false, - ), - sectionsSpace: 0, - centerSpaceRadius: 35, - sections: - spending.entries - .map( - ( - e, - ) => PieChartSectionData( - value: - e.value - .abs(), - title: - formatCurrency( - e.value - .abs(), - ), - titleStyle: TextStyle( - fontWeight: - FontWeight - .bold, - ), - radius: 40, - color: - colorHash( - e.key, - ), - ), - ) - .toList(), - ), - ), - ), - ), - ), - - Padding( - padding: EdgeInsets.symmetric( - horizontal: 8, - ), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: - spending.keys - .map( - (k) => LegendItem( - text: k, - color: colorHash(k), - ), - ) - .toList(), - ), - ), - ], - ), - ], - ), - ), - ), + ) + .toList(), + titleText: "Spending Breakdown", ), - ], - ), + ), + ], + ), Padding( padding: EdgeInsets.all(8), diff --git a/lib/ui/pages/budgets/budgets.dart b/lib/ui/pages/budgets/budgets.dart index c2dca61..0d7b38c 100644 --- a/lib/ui/pages/budgets/budgets.dart +++ b/lib/ui/pages/budgets/budgets.dart @@ -19,9 +19,7 @@ class BudgetListPage extends StatelessWidget { if (state.budgets.isEmpty) { return Column( crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text("No budgets"), - ], + children: [Text("No budgets")], ); } @@ -74,18 +72,18 @@ class BudgetListPage extends StatelessWidget { right: 16, bottom: 16, child: FloatingActionButton( - child: Icon(Icons.add), - onPressed: () { - showDialogOrModal( - context: context, - builder: - (_) => AddBudgetPopup( - onDone: () { - Navigator.of(context).pop(); - }, - ), - ); - }, + child: Icon(Icons.add), + onPressed: () { + showDialogOrModal( + context: context, + builder: + (_) => AddBudgetPopup( + onDone: () { + Navigator.of(context).pop(); + }, + ), + ); + }, ), ), ], diff --git a/lib/ui/pages/budgets/edit_budget.dart b/lib/ui/pages/budgets/edit_budget.dart index 7e9d340..060d347 100644 --- a/lib/ui/pages/budgets/edit_budget.dart +++ b/lib/ui/pages/budgets/edit_budget.dart @@ -6,45 +6,47 @@ class EditBudgetPopup extends StatefulWidget { final Budget budget; final VoidCallback onDone; - - const EditBudgetPopup({required this.budget, required this.onDone, super.key}); - + + const EditBudgetPopup({ + required this.budget, + required this.onDone, + super.key, + }); + @override EditBudgetState createState() => EditBudgetState(); } class EditBudgetState extends State { final _budgetNameEditController = TextEditingController(); - + late bool _includeOtherSpendings; - + @override void initState() { super.initState(); - + _budgetNameEditController.text = widget.budget.name; _includeOtherSpendings = widget.budget.includeOtherSpendings; - } - + } + @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ TextField( - decoration: InputDecoration( - hintText: "Name", - ), + decoration: InputDecoration(hintText: "Name"), controller: _budgetNameEditController, ), Row( children: [ Text("Include other spendings"), Switch( - value: _includeOtherSpendings, - onChanged: (value) { - setState(() => _includeOtherSpendings = value); - }, + value: _includeOtherSpendings, + onChanged: (value) { + setState(() => _includeOtherSpendings = value); + }, ), ], ), @@ -52,26 +54,28 @@ class EditBudgetState extends State { mainAxisAlignment: MainAxisAlignment.end, children: [ OutlinedButton( - onPressed: () async { - if (_budgetNameEditController.text.isEmpty) { - return; - } - if (_budgetNameEditController.text == widget.budget.name && _includeOtherSpendings == widget.budget.includeOtherSpendings) { - widget.onDone(); - return; - } - - widget.budget - ..name = _budgetNameEditController.text - ..includeOtherSpendings = _includeOtherSpendings; - await upsertBudget(widget.budget); + onPressed: () async { + if (_budgetNameEditController.text.isEmpty) { + return; + } + if (_budgetNameEditController.text == widget.budget.name && + _includeOtherSpendings == + widget.budget.includeOtherSpendings) { widget.onDone(); - }, - child: Text("Save"), + return; + } + + widget.budget + ..name = _budgetNameEditController.text + ..includeOtherSpendings = _includeOtherSpendings; + await upsertBudget(widget.budget); + widget.onDone(); + }, + child: Text("Save"), ), ], ), ], ); } -} \ No newline at end of file +} diff --git a/lib/ui/state/core.dart b/lib/ui/state/core.dart index 4723ddc..45b0ebf 100644 --- a/lib/ui/state/core.dart +++ b/lib/ui/state/core.dart @@ -99,9 +99,7 @@ class CoreCubit extends Cubit { emit(state.copyWith(expenseCategories: await getExpenseCategories())); }); _budgetsStreamSubscription?.cancel(); - _budgetsStreamSubscription = watchBudgets(activeAccount!).listen(( - _, - ) async { + _budgetsStreamSubscription = watchBudgets(activeAccount!).listen((_) async { emit(state.copyWith(budgets: await getBudgets(activeAccount!))); }); } diff --git a/lib/ui/state/core.freezed.dart b/lib/ui/state/core.freezed.dart index 02f41e5..75d4af6 100644 --- a/lib/ui/state/core.freezed.dart +++ b/lib/ui/state/core.freezed.dart @@ -12,7 +12,8 @@ part of 'core.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models', +); /// @nodoc mixin _$CoreState { @@ -41,18 +42,19 @@ abstract class $CoreStateCopyWith<$Res> { factory $CoreStateCopyWith(CoreState value, $Res Function(CoreState) then) = _$CoreStateCopyWithImpl<$Res, CoreState>; @useResult - $Res call( - {OkanePage activePage, - int? activeAccountIndex, - Transaction? activeTransaction, - List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, - List beneficiaries, - List expenseCategories, - List budgets, - Budget? activeBudget}); + $Res call({ + OkanePage activePage, + int? activeAccountIndex, + Transaction? activeTransaction, + List accounts, + List recurringTransactions, + List transactions, + List transactionTemplates, + List beneficiaries, + List expenseCategories, + List budgets, + Budget? activeBudget, + }); } /// @nodoc @@ -80,52 +82,66 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> Object? budgets = null, Object? activeBudget = freezed, }) { - return _then(_value.copyWith( - activePage: null == activePage - ? _value.activePage - : activePage // ignore: cast_nullable_to_non_nullable - as OkanePage, - activeAccountIndex: freezed == activeAccountIndex - ? _value.activeAccountIndex - : activeAccountIndex // ignore: cast_nullable_to_non_nullable - as int?, - activeTransaction: freezed == activeTransaction - ? _value.activeTransaction - : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, - accounts: null == accounts - ? _value.accounts - : accounts // ignore: cast_nullable_to_non_nullable - as List, - recurringTransactions: null == recurringTransactions - ? _value.recurringTransactions - : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, - transactions: null == transactions - ? _value.transactions - : transactions // ignore: cast_nullable_to_non_nullable - as List, - transactionTemplates: null == transactionTemplates - ? _value.transactionTemplates - : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, - beneficiaries: null == beneficiaries - ? _value.beneficiaries - : beneficiaries // ignore: cast_nullable_to_non_nullable - as List, - expenseCategories: null == expenseCategories - ? _value.expenseCategories - : expenseCategories // ignore: cast_nullable_to_non_nullable - as List, - budgets: null == budgets - ? _value.budgets - : budgets // ignore: cast_nullable_to_non_nullable - as List, - activeBudget: freezed == activeBudget - ? _value.activeBudget - : activeBudget // ignore: cast_nullable_to_non_nullable - as Budget?, - ) as $Val); + return _then( + _value.copyWith( + activePage: + null == activePage + ? _value.activePage + : activePage // ignore: cast_nullable_to_non_nullable + as OkanePage, + activeAccountIndex: + freezed == activeAccountIndex + ? _value.activeAccountIndex + : activeAccountIndex // ignore: cast_nullable_to_non_nullable + as int?, + activeTransaction: + freezed == activeTransaction + ? _value.activeTransaction + : activeTransaction // ignore: cast_nullable_to_non_nullable + as Transaction?, + accounts: + null == accounts + ? _value.accounts + : accounts // ignore: cast_nullable_to_non_nullable + as List, + recurringTransactions: + null == recurringTransactions + ? _value.recurringTransactions + : recurringTransactions // ignore: cast_nullable_to_non_nullable + as List, + transactions: + null == transactions + ? _value.transactions + : transactions // ignore: cast_nullable_to_non_nullable + as List, + transactionTemplates: + null == transactionTemplates + ? _value.transactionTemplates + : transactionTemplates // ignore: cast_nullable_to_non_nullable + as List, + beneficiaries: + null == beneficiaries + ? _value.beneficiaries + : beneficiaries // ignore: cast_nullable_to_non_nullable + as List, + expenseCategories: + null == expenseCategories + ? _value.expenseCategories + : expenseCategories // ignore: cast_nullable_to_non_nullable + as List, + budgets: + null == budgets + ? _value.budgets + : budgets // ignore: cast_nullable_to_non_nullable + as List, + activeBudget: + freezed == activeBudget + ? _value.activeBudget + : activeBudget // ignore: cast_nullable_to_non_nullable + as Budget?, + ) + as $Val, + ); } } @@ -133,22 +149,24 @@ class _$CoreStateCopyWithImpl<$Res, $Val extends CoreState> abstract class _$$CoreStateImplCopyWith<$Res> implements $CoreStateCopyWith<$Res> { factory _$$CoreStateImplCopyWith( - _$CoreStateImpl value, $Res Function(_$CoreStateImpl) then) = - __$$CoreStateImplCopyWithImpl<$Res>; + _$CoreStateImpl value, + $Res Function(_$CoreStateImpl) then, + ) = __$$CoreStateImplCopyWithImpl<$Res>; @override @useResult - $Res call( - {OkanePage activePage, - int? activeAccountIndex, - Transaction? activeTransaction, - List accounts, - List recurringTransactions, - List transactions, - List transactionTemplates, - List beneficiaries, - List expenseCategories, - List budgets, - Budget? activeBudget}); + $Res call({ + OkanePage activePage, + int? activeAccountIndex, + Transaction? activeTransaction, + List accounts, + List recurringTransactions, + List transactions, + List transactionTemplates, + List beneficiaries, + List expenseCategories, + List budgets, + Budget? activeBudget, + }); } /// @nodoc @@ -156,8 +174,9 @@ class __$$CoreStateImplCopyWithImpl<$Res> extends _$CoreStateCopyWithImpl<$Res, _$CoreStateImpl> implements _$$CoreStateImplCopyWith<$Res> { __$$CoreStateImplCopyWithImpl( - _$CoreStateImpl _value, $Res Function(_$CoreStateImpl) _then) - : super(_value, _then); + _$CoreStateImpl _value, + $Res Function(_$CoreStateImpl) _then, + ) : super(_value, _then); @pragma('vm:prefer-inline') @override @@ -174,77 +193,90 @@ class __$$CoreStateImplCopyWithImpl<$Res> Object? budgets = null, Object? activeBudget = freezed, }) { - return _then(_$CoreStateImpl( - activePage: null == activePage - ? _value.activePage - : activePage // ignore: cast_nullable_to_non_nullable - as OkanePage, - activeAccountIndex: freezed == activeAccountIndex - ? _value.activeAccountIndex - : activeAccountIndex // ignore: cast_nullable_to_non_nullable - as int?, - activeTransaction: freezed == activeTransaction - ? _value.activeTransaction - : activeTransaction // ignore: cast_nullable_to_non_nullable - as Transaction?, - accounts: null == accounts - ? _value._accounts - : accounts // ignore: cast_nullable_to_non_nullable - as List, - recurringTransactions: null == recurringTransactions - ? _value._recurringTransactions - : recurringTransactions // ignore: cast_nullable_to_non_nullable - as List, - transactions: null == transactions - ? _value._transactions - : transactions // ignore: cast_nullable_to_non_nullable - as List, - transactionTemplates: null == transactionTemplates - ? _value._transactionTemplates - : transactionTemplates // ignore: cast_nullable_to_non_nullable - as List, - beneficiaries: null == beneficiaries - ? _value._beneficiaries - : beneficiaries // ignore: cast_nullable_to_non_nullable - as List, - expenseCategories: null == expenseCategories - ? _value._expenseCategories - : expenseCategories // ignore: cast_nullable_to_non_nullable - as List, - budgets: null == budgets - ? _value._budgets - : budgets // ignore: cast_nullable_to_non_nullable - as List, - activeBudget: freezed == activeBudget - ? _value.activeBudget - : activeBudget // ignore: cast_nullable_to_non_nullable - as Budget?, - )); + return _then( + _$CoreStateImpl( + activePage: + null == activePage + ? _value.activePage + : activePage // ignore: cast_nullable_to_non_nullable + as OkanePage, + activeAccountIndex: + freezed == activeAccountIndex + ? _value.activeAccountIndex + : activeAccountIndex // ignore: cast_nullable_to_non_nullable + as int?, + activeTransaction: + freezed == activeTransaction + ? _value.activeTransaction + : activeTransaction // ignore: cast_nullable_to_non_nullable + as Transaction?, + accounts: + null == accounts + ? _value._accounts + : accounts // ignore: cast_nullable_to_non_nullable + as List, + recurringTransactions: + null == recurringTransactions + ? _value._recurringTransactions + : recurringTransactions // ignore: cast_nullable_to_non_nullable + as List, + transactions: + null == transactions + ? _value._transactions + : transactions // ignore: cast_nullable_to_non_nullable + as List, + transactionTemplates: + null == transactionTemplates + ? _value._transactionTemplates + : transactionTemplates // ignore: cast_nullable_to_non_nullable + as List, + beneficiaries: + null == beneficiaries + ? _value._beneficiaries + : beneficiaries // ignore: cast_nullable_to_non_nullable + as List, + expenseCategories: + null == expenseCategories + ? _value._expenseCategories + : expenseCategories // ignore: cast_nullable_to_non_nullable + as List, + budgets: + null == budgets + ? _value._budgets + : budgets // ignore: cast_nullable_to_non_nullable + as List, + activeBudget: + freezed == activeBudget + ? _value.activeBudget + : activeBudget // ignore: cast_nullable_to_non_nullable + as Budget?, + ), + ); } } /// @nodoc class _$CoreStateImpl implements _CoreState { - const _$CoreStateImpl( - {this.activePage = OkanePage.accounts, - this.activeAccountIndex, - this.activeTransaction = null, - final List accounts = const [], - final List recurringTransactions = const [], - final List transactions = const [], - final List transactionTemplates = const [], - final List beneficiaries = const [], - final List expenseCategories = const [], - final List budgets = const [], - this.activeBudget = null}) - : _accounts = accounts, - _recurringTransactions = recurringTransactions, - _transactions = transactions, - _transactionTemplates = transactionTemplates, - _beneficiaries = beneficiaries, - _expenseCategories = expenseCategories, - _budgets = budgets; + const _$CoreStateImpl({ + this.activePage = OkanePage.accounts, + this.activeAccountIndex, + this.activeTransaction = null, + final List accounts = const [], + final List recurringTransactions = const [], + final List transactions = const [], + final List transactionTemplates = const [], + final List beneficiaries = const [], + final List expenseCategories = const [], + final List budgets = const [], + this.activeBudget = null, + }) : _accounts = accounts, + _recurringTransactions = recurringTransactions, + _transactions = transactions, + _transactionTemplates = transactionTemplates, + _beneficiaries = beneficiaries, + _expenseCategories = expenseCategories, + _budgets = budgets; @override @JsonKey() @@ -341,16 +373,26 @@ class _$CoreStateImpl implements _CoreState { (identical(other.activeTransaction, activeTransaction) || other.activeTransaction == activeTransaction) && const DeepCollectionEquality().equals(other._accounts, _accounts) && - const DeepCollectionEquality() - .equals(other._recurringTransactions, _recurringTransactions) && - const DeepCollectionEquality() - .equals(other._transactions, _transactions) && - const DeepCollectionEquality() - .equals(other._transactionTemplates, _transactionTemplates) && - const DeepCollectionEquality() - .equals(other._beneficiaries, _beneficiaries) && - const DeepCollectionEquality() - .equals(other._expenseCategories, _expenseCategories) && + const DeepCollectionEquality().equals( + other._recurringTransactions, + _recurringTransactions, + ) && + const DeepCollectionEquality().equals( + other._transactions, + _transactions, + ) && + const DeepCollectionEquality().equals( + other._transactionTemplates, + _transactionTemplates, + ) && + const DeepCollectionEquality().equals( + other._beneficiaries, + _beneficiaries, + ) && + const DeepCollectionEquality().equals( + other._expenseCategories, + _expenseCategories, + ) && const DeepCollectionEquality().equals(other._budgets, _budgets) && (identical(other.activeBudget, activeBudget) || other.activeBudget == activeBudget)); @@ -358,18 +400,19 @@ class _$CoreStateImpl implements _CoreState { @override int get hashCode => Object.hash( - runtimeType, - activePage, - activeAccountIndex, - activeTransaction, - const DeepCollectionEquality().hash(_accounts), - const DeepCollectionEquality().hash(_recurringTransactions), - const DeepCollectionEquality().hash(_transactions), - const DeepCollectionEquality().hash(_transactionTemplates), - const DeepCollectionEquality().hash(_beneficiaries), - const DeepCollectionEquality().hash(_expenseCategories), - const DeepCollectionEquality().hash(_budgets), - activeBudget); + runtimeType, + activePage, + activeAccountIndex, + activeTransaction, + const DeepCollectionEquality().hash(_accounts), + const DeepCollectionEquality().hash(_recurringTransactions), + const DeepCollectionEquality().hash(_transactions), + const DeepCollectionEquality().hash(_transactionTemplates), + const DeepCollectionEquality().hash(_beneficiaries), + const DeepCollectionEquality().hash(_expenseCategories), + const DeepCollectionEquality().hash(_budgets), + activeBudget, + ); @JsonKey(ignore: true) @override @@ -379,18 +422,19 @@ class _$CoreStateImpl implements _CoreState { } abstract class _CoreState implements CoreState { - const factory _CoreState( - {final OkanePage activePage, - final int? activeAccountIndex, - final Transaction? activeTransaction, - final List accounts, - final List recurringTransactions, - final List transactions, - final List transactionTemplates, - final List beneficiaries, - final List expenseCategories, - final List budgets, - final Budget? activeBudget}) = _$CoreStateImpl; + const factory _CoreState({ + final OkanePage activePage, + final int? activeAccountIndex, + final Transaction? activeTransaction, + final List accounts, + final List recurringTransactions, + final List transactions, + final List transactionTemplates, + final List beneficiaries, + final List expenseCategories, + final List budgets, + final Budget? activeBudget, + }) = _$CoreStateImpl; @override OkanePage get activePage; diff --git a/lib/ui/utils.dart b/lib/ui/utils.dart index 9471e8b..59c36a0 100644 --- a/lib/ui/utils.dart +++ b/lib/ui/utils.dart @@ -17,7 +17,7 @@ Future showDialogOrModal({ builder: (context) => Padding( padding: EdgeInsets.only( - bottom: 32 + MediaQuery.of(context).viewInsets.bottom, + bottom: 32 + MediaQuery.of(context).viewInsets.bottom, ), child: builder(context), ), @@ -74,12 +74,5 @@ String formatCurrency(double amount, {bool precise = true}) { } DateTime monthEnding(DateTime now) { - return DateTime( - now.year, - now.month, - 32, - 23, - 59, - 59, - ); -} \ No newline at end of file + return DateTime(now.year, now.month, 32, 23, 59, 59); +} diff --git a/lib/ui/widgets/account_indicator.dart b/lib/ui/widgets/account_indicator.dart index d8fc420..a8bb875 100644 --- a/lib/ui/widgets/account_indicator.dart +++ b/lib/ui/widgets/account_indicator.dart @@ -22,8 +22,7 @@ class AccountIndicator extends StatelessWidget { ), ), const Spacer(), - if (trailing != null) - trailing!, + if (trailing != null) trailing!, ], ), ); diff --git a/lib/ui/widgets/piechart.dart b/lib/ui/widgets/piechart.dart new file mode 100644 index 0000000..0d43975 --- /dev/null +++ b/lib/ui/widgets/piechart.dart @@ -0,0 +1,84 @@ +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:okane/ui/pages/account/breakdown_card.dart'; + +typedef OkanePieChartSection = ({String title, double value, Color color}); + +typedef OkanePieChartValueConverter = String Function(double); + +String numToString(double input) { + return input.toString(); +} + +class OkanePieChart extends StatelessWidget { + // Width of the pie chart + final double width; + + // Height of the pie chart + final double height; + + final List items; + + final OkanePieChartValueConverter valueConverter; + + const OkanePieChart({ + required this.items, + this.valueConverter = numToString, + this.width = 150, + this.height = 150, + super.key, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.all(16), + child: SizedBox( + width: width, + height: height, + child: AspectRatio( + aspectRatio: 1, + child: PieChart( + PieChartData( + borderData: FlBorderData(show: false), + sectionsSpace: 5, + centerSpaceRadius: 35, + sections: + items + .map( + (i) => PieChartSectionData( + value: i.value, + title: valueConverter(i.value), + titleStyle: TextStyle( + fontWeight: FontWeight.bold, + ), + radius: 40, + color: i.color, + ), + ) + .toList(), + ), + ), + ), + ), + ), + + Padding( + padding: EdgeInsets.symmetric(horizontal: 8), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: + items + .map((i) => LegendItem(text: i.title, color: i.color)) + .toList(), + ), + ), + ], + ); + } +} diff --git a/lib/ui/widgets/piechart_card.dart b/lib/ui/widgets/piechart_card.dart new file mode 100644 index 0000000..a6cd5d6 --- /dev/null +++ b/lib/ui/widgets/piechart_card.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:okane/screen.dart'; +import 'package:okane/ui/widgets/piechart.dart'; + +class ResponsiveCard extends StatelessWidget { + final String titleText; + final String? subtitleText; + + final Widget child; + + const ResponsiveCard({ + super.key, + required this.titleText, + required this.child, + this.subtitleText, + }); + + @override + Widget build(BuildContext context) { + final screenSize = getScreenSize(context); + final card = Card( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(top: 8, left: 8, right: 8), + child: Text( + titleText, + style: Theme.of( + context, + ).textTheme.titleLarge!.copyWith(fontWeight: FontWeight.bold), + ), + ), + + child, + + if (subtitleText != null) Text(subtitleText!), + ], + ), + ); + return switch (screenSize) { + ScreenSize.small => Row(children: [Expanded(child: card)]), + ScreenSize.normal => Container( + constraints: BoxConstraints(maxWidth: ScreenSize.normal.size), + child: card, + ), + }; + } +} + +class PieChartCard extends StatelessWidget { + final String titleText; + + // Text to display when items is empty. + final String fallbackText; + + final OkanePieChartValueConverter valueConverter; + + final List items; + + const PieChartCard({ + super.key, + this.valueConverter = numToString, + required this.items, + required this.fallbackText, + required this.titleText, + }); + + @override + Widget build(BuildContext context) { + final child = + items.isEmpty + ? SizedBox( + width: 150, + height: 150, + child: Center(child: Text(fallbackText)), + ) + : OkanePieChart(valueConverter: valueConverter, items: items); + + return ResponsiveCard(titleText: titleText, child: child); + } +}