Make the pie chart widget reusable
This commit is contained in:
		
							parent
							
								
									d40d24f759
								
							
						
					
					
						commit
						63b5354b72
					
				| @ -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<Account, Account, QWhere> { | ||||
| extension AccountQueryWhere on QueryBuilder<Account, Account, QWhereClause> { | ||||
|   QueryBuilder<Account, Account, QAfterWhereClause> 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<Account, Account, QWhereClause> { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Account, Account, QAfterWhereClause> idGreaterThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Account, Account, QAfterWhereClause> 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<Account, Account, QWhereClause> { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Account, Account, QAfterWhereClause> idLessThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Account, Account, QAfterWhereClause> 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<Account, Account, QWhereClause> { | ||||
|     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<Account, Account, QFilterCondition> { | ||||
|   QueryBuilder<Account, Account, 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), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| @ -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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QAfterFilterCondition> 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<Account, Account, QDistinct> { | ||||
|   QueryBuilder<Account, Account, QDistinct> distinctByName( | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<Account, Account, QDistinct> distinctByName({ | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'name', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|  | ||||
| @ -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<P>( | ||||
|       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<IsarLinkBase<dynamic>> _beneficiaryGetLinks(Beneficiary object) { | ||||
| } | ||||
| 
 | ||||
| void _beneficiaryAttach( | ||||
|     IsarCollection<dynamic> col, Id id, Beneficiary object) { | ||||
|   IsarCollection<dynamic> col, | ||||
|   Id id, | ||||
|   Beneficiary object, | ||||
| ) { | ||||
|   object.id = id; | ||||
|   object.account.attach(col, col.isar.collection<Account>(), r'account', id); | ||||
| } | ||||
| @ -153,15 +150,13 @@ extension BeneficiaryQueryWhere | ||||
|     on QueryBuilder<Beneficiary, Beneficiary, QWhereClause> { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> 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<Beneficiary, Beneficiary, QAfterWhereClause> idNotEqualTo( | ||||
|       Id id) { | ||||
|     Id id, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       if (query.whereSort == Sort.asc) { | ||||
|         return query | ||||
| @ -183,8 +178,10 @@ extension BeneficiaryQueryWhere | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> idGreaterThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> 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<Beneficiary, Beneficiary, QAfterWhereClause> idLessThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterWhereClause> 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<Beneficiary, Beneficiary, QFilterCondition> { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QAfterFilterCondition> 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<Beneficiary, Beneficiary, QFilterCondition> { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> account( | ||||
|       FilterQuery<Account> q) { | ||||
|     FilterQuery<Account> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'account'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QAfterFilterCondition> | ||||
|       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<Beneficiary, Beneficiary, QDistinct> { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByImagePath( | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByImagePath({ | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'imagePath', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByName( | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<Beneficiary, Beneficiary, QDistinct> distinctByName({ | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'name', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|  | ||||
| @ -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<Account>(); | ||||
| 
 | ||||
|   final items = IsarLinks<BudgetItem>(); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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<IsarLinkBase<dynamic>> _budgetItemGetLinks(BudgetItem object) { | ||||
| void _budgetItemAttach(IsarCollection<dynamic> col, Id id, BudgetItem object) { | ||||
|   object.id = id; | ||||
|   object.expenseCategory.attach( | ||||
|       col, col.isar.collection<ExpenseCategory>(), r'expenseCategory', id); | ||||
|     col, | ||||
|     col.isar.collection<ExpenseCategory>(), | ||||
|     r'expenseCategory', | ||||
|     id, | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| extension BudgetItemQueryWhereSort | ||||
| @ -115,10 +115,7 @@ extension BudgetItemQueryWhere | ||||
|     on QueryBuilder<BudgetItem, BudgetItem, QWhereClause> { | ||||
|   QueryBuilder<BudgetItem, BudgetItem, QAfterWhereClause> 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<BudgetItem, BudgetItem, QAfterWhereClause> idGreaterThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<BudgetItem, BudgetItem, QAfterWhereClause> 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<BudgetItem, BudgetItem, QAfterWhereClause> idLessThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<BudgetItem, BudgetItem, QAfterWhereClause> 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<BudgetItem, BudgetItem, QAfterFilterCondition> 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<BudgetItem, BudgetItem, QFilterCondition> { | ||||
|   QueryBuilder<BudgetItem, BudgetItem, QAfterFilterCondition> expenseCategory( | ||||
|       FilterQuery<ExpenseCategory> q) { | ||||
|     FilterQuery<ExpenseCategory> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'expenseCategory'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<BudgetItem, BudgetItem, QAfterFilterCondition> | ||||
|       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<P>( | ||||
|       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<Budget, Budget, QWhere> { | ||||
| extension BudgetQueryWhere on QueryBuilder<Budget, Budget, QWhereClause> { | ||||
|   QueryBuilder<Budget, Budget, QAfterWhereClause> 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<Budget, Budget, QWhereClause> { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Budget, Budget, QAfterWhereClause> idGreaterThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Budget, Budget, QAfterWhereClause> 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<Budget, Budget, QWhereClause> { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Budget, Budget, QAfterWhereClause> idLessThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Budget, Budget, QAfterWhereClause> 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<Budget, Budget, QWhereClause> { | ||||
|     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<Budget, Budget, QWhereClause> { | ||||
| extension BudgetQueryFilter on QueryBuilder<Budget, Budget, QFilterCondition> { | ||||
|   QueryBuilder<Budget, Budget, 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), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
| @ -614,11 +623,13 @@ extension BudgetQueryFilter on QueryBuilder<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QAfterFilterCondition> | ||||
|       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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QAfterFilterCondition> nameContains(String value, | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> { | ||||
|     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<Budget, Budget, QFilterCondition> {} | ||||
| 
 | ||||
| extension BudgetQueryLinks on QueryBuilder<Budget, Budget, QFilterCondition> { | ||||
|   QueryBuilder<Budget, Budget, QAfterFilterCondition> account( | ||||
|       FilterQuery<Account> q) { | ||||
|     FilterQuery<Account> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'account'); | ||||
|     }); | ||||
| @ -924,14 +973,16 @@ extension BudgetQueryLinks on QueryBuilder<Budget, Budget, QFilterCondition> { | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Budget, Budget, QAfterFilterCondition> items( | ||||
|       FilterQuery<BudgetItem> q) { | ||||
|     FilterQuery<BudgetItem> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'items'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Budget, Budget, QAfterFilterCondition> 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<Budget, Budget, QFilterCondition> { | ||||
|   }) { | ||||
|     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<Budget, Budget, QDistinct> { | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Budget, Budget, QDistinct> distinctByName( | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<Budget, Budget, QDistinct> distinctByName({ | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'name', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|  | ||||
| @ -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<IsarLinkBase<dynamic>> _expenseCategoryGetLinks(ExpenseCategory object) { | ||||
| } | ||||
| 
 | ||||
| void _expenseCategoryAttach( | ||||
|     IsarCollection<dynamic> col, Id id, ExpenseCategory object) { | ||||
|   IsarCollection<dynamic> col, | ||||
|   Id id, | ||||
|   ExpenseCategory object, | ||||
| ) { | ||||
|   object.id = id; | ||||
| } | ||||
| 
 | ||||
| @ -107,17 +106,15 @@ extension ExpenseCategoryQueryWhereSort | ||||
| extension ExpenseCategoryQueryWhere | ||||
|     on QueryBuilder<ExpenseCategory, ExpenseCategory, QWhereClause> { | ||||
|   QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterWhereClause> 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<ExpenseCategory, ExpenseCategory, QAfterWhereClause> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterWhereClause> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterWhereClause> 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<ExpenseCategory, ExpenseCategory, QFilterCondition> { | ||||
|   QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterFilterCondition> | ||||
|       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<ExpenseCategory, ExpenseCategory, QAfterSortBy> | ||||
|       sortByNameDesc() { | ||||
|   sortByNameDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.desc); | ||||
|     }); | ||||
| @ -413,7 +417,7 @@ extension ExpenseCategoryQuerySortThenBy | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<ExpenseCategory, ExpenseCategory, QAfterSortBy> | ||||
|       thenByNameDesc() { | ||||
|   thenByNameDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.desc); | ||||
|     }); | ||||
| @ -422,8 +426,9 @@ extension ExpenseCategoryQuerySortThenBy | ||||
| 
 | ||||
| extension ExpenseCategoryQueryWhereDistinct | ||||
|     on QueryBuilder<ExpenseCategory, ExpenseCategory, QDistinct> { | ||||
|   QueryBuilder<ExpenseCategory, ExpenseCategory, QDistinct> distinctByName( | ||||
|       {bool caseSensitive = true}) { | ||||
|   QueryBuilder<ExpenseCategory, ExpenseCategory, QDistinct> distinctByName({ | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'name', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|  | ||||
| @ -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<IsarLinkBase<dynamic>> _recurringTransactionGetLinks( | ||||
|     RecurringTransaction object) { | ||||
|   RecurringTransaction object, | ||||
| ) { | ||||
|   return [object.template, object.account]; | ||||
| } | ||||
| 
 | ||||
| void _recurringTransactionAttach( | ||||
|     IsarCollection<dynamic> col, Id id, RecurringTransaction object) { | ||||
|   IsarCollection<dynamic> col, | ||||
|   Id id, | ||||
|   RecurringTransaction object, | ||||
| ) { | ||||
|   object.id = id; | ||||
|   object.template | ||||
|       .attach(col, col.isar.collection<TransactionTemplate>(), r'template', id); | ||||
|   object.template.attach( | ||||
|     col, | ||||
|     col.isar.collection<TransactionTemplate>(), | ||||
|     r'template', | ||||
|     id, | ||||
|   ); | ||||
|   object.account.attach(col, col.isar.collection<Account>(), r'account', id); | ||||
| } | ||||
| 
 | ||||
| extension RecurringTransactionQueryWhereSort | ||||
|     on QueryBuilder<RecurringTransaction, RecurringTransaction, QWhere> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhere> | ||||
|       anyId() { | ||||
|   anyId() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addWhereClause(const IdWhereClause.any()); | ||||
|     }); | ||||
| @ -134,17 +138,14 @@ extension RecurringTransactionQueryWhereSort | ||||
| extension RecurringTransactionQueryWhere | ||||
|     on QueryBuilder<RecurringTransaction, RecurringTransaction, QWhereClause> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterWhereClause> | ||||
|       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<RecurringTransaction, RecurringTransaction, QAfterWhereClause> | ||||
|       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<RecurringTransaction, RecurringTransaction, QAfterWhereClause> | ||||
|       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<RecurringTransaction, RecurringTransaction, QAfterWhereClause> | ||||
|       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<RecurringTransaction, RecurringTransaction, QAfterWhereClause> | ||||
|       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<RecurringTransaction, | ||||
|     RecurringTransaction, QFilterCondition> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, | ||||
|     RecurringTransaction, QFilterCondition> {} | ||||
| extension RecurringTransactionQueryObject | ||||
|     on | ||||
|         QueryBuilder< | ||||
|           RecurringTransaction, | ||||
|           RecurringTransaction, | ||||
|           QFilterCondition | ||||
|         > {} | ||||
| 
 | ||||
| extension RecurringTransactionQueryLinks on QueryBuilder<RecurringTransaction, | ||||
|     RecurringTransaction, QFilterCondition> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> template(FilterQuery<TransactionTemplate> q) { | ||||
| extension RecurringTransactionQueryLinks | ||||
|     on | ||||
|         QueryBuilder< | ||||
|           RecurringTransaction, | ||||
|           RecurringTransaction, | ||||
|           QFilterCondition | ||||
|         > { | ||||
|   QueryBuilder< | ||||
|     RecurringTransaction, | ||||
|     RecurringTransaction, | ||||
|     QAfterFilterCondition | ||||
|   > | ||||
|   template(FilterQuery<TransactionTemplate> q) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'template'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> templateIsNull() { | ||||
|   QueryBuilder< | ||||
|     RecurringTransaction, | ||||
|     RecurringTransaction, | ||||
|     QAfterFilterCondition | ||||
|   > | ||||
|   templateIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'template', 0, true, 0, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> account(FilterQuery<Account> q) { | ||||
|   QueryBuilder< | ||||
|     RecurringTransaction, | ||||
|     RecurringTransaction, | ||||
|     QAfterFilterCondition | ||||
|   > | ||||
|   account(FilterQuery<Account> q) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'account'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, | ||||
|       QAfterFilterCondition> 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<RecurringTransaction, | ||||
| extension RecurringTransactionQuerySortBy | ||||
|     on QueryBuilder<RecurringTransaction, RecurringTransaction, QSortBy> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       sortByDays() { | ||||
|   sortByDays() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'days', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       sortByDaysDesc() { | ||||
|   sortByDaysDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'days', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       sortByLastExecution() { | ||||
|   sortByLastExecution() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'lastExecution', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       sortByLastExecutionDesc() { | ||||
|   sortByLastExecutionDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'lastExecution', Sort.desc); | ||||
|     }); | ||||
| @ -459,42 +546,42 @@ extension RecurringTransactionQuerySortBy | ||||
| extension RecurringTransactionQuerySortThenBy | ||||
|     on QueryBuilder<RecurringTransaction, RecurringTransaction, QSortThenBy> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenByDays() { | ||||
|   thenByDays() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'days', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenByDaysDesc() { | ||||
|   thenByDaysDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'days', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenById() { | ||||
|   thenById() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'id', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenByIdDesc() { | ||||
|   thenByIdDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'id', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenByLastExecution() { | ||||
|   thenByLastExecution() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'lastExecution', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QAfterSortBy> | ||||
|       thenByLastExecutionDesc() { | ||||
|   thenByLastExecutionDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'lastExecution', Sort.desc); | ||||
|     }); | ||||
| @ -504,22 +591,27 @@ extension RecurringTransactionQuerySortThenBy | ||||
| extension RecurringTransactionQueryWhereDistinct | ||||
|     on QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct> { | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct> | ||||
|       distinctByDays() { | ||||
|   distinctByDays() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'days'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, RecurringTransaction, QDistinct> | ||||
|       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<RecurringTransaction, int, QQueryOperations> idProperty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addPropertyName(r'id'); | ||||
| @ -533,7 +625,7 @@ extension RecurringTransactionQueryProperty on QueryBuilder< | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<RecurringTransaction, DateTime?, QQueryOperations> | ||||
|       lastExecutionProperty() { | ||||
|   lastExecutionProperty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addPropertyName(r'lastExecution'); | ||||
|     }); | ||||
|  | ||||
| @ -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<IsarLinkBase<dynamic>> _transactionTemplateGetLinks( | ||||
|     TransactionTemplate object) { | ||||
|   TransactionTemplate object, | ||||
| ) { | ||||
|   return [object.expenseCategory, object.beneficiary, object.account]; | ||||
| } | ||||
| 
 | ||||
| void _transactionTemplateAttach( | ||||
|     IsarCollection<dynamic> col, Id id, TransactionTemplate object) { | ||||
|   IsarCollection<dynamic> col, | ||||
|   Id id, | ||||
|   TransactionTemplate object, | ||||
| ) { | ||||
|   object.id = id; | ||||
|   object.expenseCategory.attach( | ||||
|       col, col.isar.collection<ExpenseCategory>(), r'expenseCategory', id); | ||||
|   object.beneficiary | ||||
|       .attach(col, col.isar.collection<Beneficiary>(), r'beneficiary', id); | ||||
|     col, | ||||
|     col.isar.collection<ExpenseCategory>(), | ||||
|     r'expenseCategory', | ||||
|     id, | ||||
|   ); | ||||
|   object.beneficiary.attach( | ||||
|     col, | ||||
|     col.isar.collection<Beneficiary>(), | ||||
|     r'beneficiary', | ||||
|     id, | ||||
|   ); | ||||
|   object.account.attach(col, col.isar.collection<Account>(), r'account', id); | ||||
| } | ||||
| 
 | ||||
| @ -151,17 +155,14 @@ extension TransactionTemplateQueryWhereSort | ||||
| extension TransactionTemplateQueryWhere | ||||
|     on QueryBuilder<TransactionTemplate, TransactionTemplate, QWhereClause> { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterWhereClause> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterWhereClause> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterWhereClause> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterWhereClause> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterWhereClause> | ||||
|       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<TransactionTemplate, | ||||
|     TransactionTemplate, QFilterCondition> { | ||||
| extension TransactionTemplateQueryFilter | ||||
|     on | ||||
|         QueryBuilder< | ||||
|           TransactionTemplate, | ||||
|           TransactionTemplate, | ||||
|           QFilterCondition | ||||
|         > { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       amountBetween( | ||||
|   amountBetween( | ||||
|     double lower, | ||||
|     double upper, { | ||||
|     bool includeLower = true, | ||||
| @ -276,121 +287,125 @@ extension TransactionTemplateQueryFilter on QueryBuilder<TransactionTemplate, | ||||
|     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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       nameBetween( | ||||
|   nameBetween( | ||||
|     String lower, | ||||
|     String upper, { | ||||
|     bool includeLower = true, | ||||
| @ -398,140 +413,151 @@ extension TransactionTemplateQueryFilter on QueryBuilder<TransactionTemplate, | ||||
|     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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       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<TransactionTemplate, | ||||
|     TransactionTemplate, QFilterCondition> {} | ||||
| extension TransactionTemplateQueryObject | ||||
|     on | ||||
|         QueryBuilder< | ||||
|           TransactionTemplate, | ||||
|           TransactionTemplate, | ||||
|           QFilterCondition | ||||
|         > {} | ||||
| 
 | ||||
| extension TransactionTemplateQueryLinks on QueryBuilder<TransactionTemplate, | ||||
|     TransactionTemplate, QFilterCondition> { | ||||
| extension TransactionTemplateQueryLinks | ||||
|     on | ||||
|         QueryBuilder< | ||||
|           TransactionTemplate, | ||||
|           TransactionTemplate, | ||||
|           QFilterCondition | ||||
|         > { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       expenseCategory(FilterQuery<ExpenseCategory> q) { | ||||
|   expenseCategory(FilterQuery<ExpenseCategory> q) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'expenseCategory'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       expenseCategoryIsNull() { | ||||
|   expenseCategoryIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'expenseCategory', 0, true, 0, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       beneficiary(FilterQuery<Beneficiary> q) { | ||||
|   beneficiary(FilterQuery<Beneficiary> q) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'beneficiary'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       beneficiaryIsNull() { | ||||
|   beneficiaryIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'beneficiary', 0, true, 0, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       account(FilterQuery<Account> q) { | ||||
|   account(FilterQuery<Account> q) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'account'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterFilterCondition> | ||||
|       accountIsNull() { | ||||
|   accountIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'account', 0, true, 0, true); | ||||
|     }); | ||||
| @ -541,42 +567,42 @@ extension TransactionTemplateQueryLinks on QueryBuilder<TransactionTemplate, | ||||
| extension TransactionTemplateQuerySortBy | ||||
|     on QueryBuilder<TransactionTemplate, TransactionTemplate, QSortBy> { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByAmount() { | ||||
|   sortByAmount() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'amount', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByAmountDesc() { | ||||
|   sortByAmountDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'amount', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByName() { | ||||
|   sortByName() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByNameDesc() { | ||||
|   sortByNameDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByRecurring() { | ||||
|   sortByRecurring() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'recurring', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       sortByRecurringDesc() { | ||||
|   sortByRecurringDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'recurring', Sort.desc); | ||||
|     }); | ||||
| @ -586,56 +612,56 @@ extension TransactionTemplateQuerySortBy | ||||
| extension TransactionTemplateQuerySortThenBy | ||||
|     on QueryBuilder<TransactionTemplate, TransactionTemplate, QSortThenBy> { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByAmount() { | ||||
|   thenByAmount() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'amount', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByAmountDesc() { | ||||
|   thenByAmountDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'amount', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenById() { | ||||
|   thenById() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'id', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByIdDesc() { | ||||
|   thenByIdDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'id', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByName() { | ||||
|   thenByName() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByNameDesc() { | ||||
|   thenByNameDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'name', Sort.desc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByRecurring() { | ||||
|   thenByRecurring() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'recurring', Sort.asc); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QAfterSortBy> | ||||
|       thenByRecurringDesc() { | ||||
|   thenByRecurringDesc() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addSortBy(r'recurring', Sort.desc); | ||||
|     }); | ||||
| @ -645,21 +671,21 @@ extension TransactionTemplateQuerySortThenBy | ||||
| extension TransactionTemplateQueryWhereDistinct | ||||
|     on QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct> { | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct> | ||||
|       distinctByAmount() { | ||||
|   distinctByAmount() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'amount'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct> | ||||
|       distinctByName({bool caseSensitive = true}) { | ||||
|   distinctByName({bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'name', caseSensitive: caseSensitive); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, TransactionTemplate, QDistinct> | ||||
|       distinctByRecurring() { | ||||
|   distinctByRecurring() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addDistinctBy(r'recurring'); | ||||
|     }); | ||||
| @ -687,7 +713,7 @@ extension TransactionTemplateQueryProperty | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<TransactionTemplate, bool, QQueryOperations> | ||||
|       recurringProperty() { | ||||
|   recurringProperty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addPropertyName(r'recurring'); | ||||
|     }); | ||||
|  | ||||
| @ -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<IsarLinkBase<dynamic>> _transactionGetLinks(Transaction object) { | ||||
| } | ||||
| 
 | ||||
| void _transactionAttach( | ||||
|     IsarCollection<dynamic> col, Id id, Transaction object) { | ||||
|   IsarCollection<dynamic> col, | ||||
|   Id id, | ||||
|   Transaction object, | ||||
| ) { | ||||
|   object.id = id; | ||||
|   object.expenseCategory.attach( | ||||
|       col, col.isar.collection<ExpenseCategory>(), r'expenseCategory', id); | ||||
|     col, | ||||
|     col.isar.collection<ExpenseCategory>(), | ||||
|     r'expenseCategory', | ||||
|     id, | ||||
|   ); | ||||
|   object.account.attach(col, col.isar.collection<Account>(), r'account', id); | ||||
|   object.beneficiary | ||||
|       .attach(col, col.isar.collection<Beneficiary>(), r'beneficiary', id); | ||||
|   object.beneficiary.attach( | ||||
|     col, | ||||
|     col.isar.collection<Beneficiary>(), | ||||
|     r'beneficiary', | ||||
|     id, | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| extension TransactionQueryWhereSort | ||||
| @ -156,15 +155,13 @@ extension TransactionQueryWhere | ||||
|     on QueryBuilder<Transaction, Transaction, QWhereClause> { | ||||
|   QueryBuilder<Transaction, Transaction, QAfterWhereClause> 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<Transaction, Transaction, QAfterWhereClause> idNotEqualTo( | ||||
|       Id id) { | ||||
|     Id id, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       if (query.whereSort == Sort.asc) { | ||||
|         return query | ||||
| @ -186,8 +183,10 @@ extension TransactionQueryWhere | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterWhereClause> idGreaterThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Transaction, Transaction, QAfterWhereClause> 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<Transaction, Transaction, QAfterWhereClause> idLessThan(Id id, | ||||
|       {bool include = false}) { | ||||
|   QueryBuilder<Transaction, Transaction, QAfterWhereClause> 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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementStartsWith( | ||||
|     String value, { | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.startsWith( | ||||
|         property: r'tags', | ||||
|         value: value, | ||||
|         caseSensitive: caseSensitive, | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementEndsWith( | ||||
|     String value, { | ||||
|     bool caseSensitive = true, | ||||
|   }) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.endsWith( | ||||
|         property: r'tags', | ||||
|         value: value, | ||||
|         caseSensitive: caseSensitive, | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementContains(String value, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.contains( | ||||
|         property: r'tags', | ||||
|         value: value, | ||||
|         caseSensitive: caseSensitive, | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementMatches(String pattern, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.matches( | ||||
|         property: r'tags', | ||||
|         wildcard: pattern, | ||||
|         caseSensitive: caseSensitive, | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementIsEmpty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.equalTo( | ||||
|         property: r'tags', | ||||
|         value: '', | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsElementIsNotEmpty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition(FilterCondition.greaterThan( | ||||
|         property: r'tags', | ||||
|         value: '', | ||||
|       )); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementStartsWith(String value, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.startsWith( | ||||
|           property: r'tags', | ||||
|           value: value, | ||||
|           caseSensitive: caseSensitive, | ||||
|         ), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementEndsWith(String value, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.endsWith( | ||||
|           property: r'tags', | ||||
|           value: value, | ||||
|           caseSensitive: caseSensitive, | ||||
|         ), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementContains(String value, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.contains( | ||||
|           property: r'tags', | ||||
|           value: value, | ||||
|           caseSensitive: caseSensitive, | ||||
|         ), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementMatches(String pattern, {bool caseSensitive = true}) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.matches( | ||||
|           property: r'tags', | ||||
|           wildcard: pattern, | ||||
|           caseSensitive: caseSensitive, | ||||
|         ), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementIsEmpty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.equalTo(property: r'tags', value: ''), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsElementIsNotEmpty() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.addFilterCondition( | ||||
|         FilterCondition.greaterThan(property: r'tags', value: ''), | ||||
|       ); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|   tagsLengthEqualTo(int length) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.listLength(r'tags', length, true, length, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> 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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       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<Transaction, Transaction, QAfterFilterCondition> | ||||
|       tagsLengthBetween( | ||||
|   tagsLengthBetween( | ||||
|     int lower, | ||||
|     int upper, { | ||||
|     bool includeLower = true, | ||||
| @ -623,42 +615,45 @@ extension TransactionQueryObject | ||||
| extension TransactionQueryLinks | ||||
|     on QueryBuilder<Transaction, Transaction, QFilterCondition> { | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> expenseCategory( | ||||
|       FilterQuery<ExpenseCategory> q) { | ||||
|     FilterQuery<ExpenseCategory> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'expenseCategory'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       expenseCategoryIsNull() { | ||||
|   expenseCategoryIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'expenseCategory', 0, true, 0, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> account( | ||||
|       FilterQuery<Account> q) { | ||||
|     FilterQuery<Account> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'account'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       accountIsNull() { | ||||
|   accountIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'account', 0, true, 0, true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> beneficiary( | ||||
|       FilterQuery<Beneficiary> q) { | ||||
|     FilterQuery<Beneficiary> q, | ||||
|   ) { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.link(q, r'beneficiary'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   QueryBuilder<Transaction, Transaction, QAfterFilterCondition> | ||||
|       beneficiaryIsNull() { | ||||
|   beneficiaryIsNull() { | ||||
|     return QueryBuilder.apply(this, (query) { | ||||
|       return query.linkLength(r'beneficiary', 0, true, 0, true); | ||||
|     }); | ||||
|  | ||||
| @ -211,7 +211,12 @@ Stream<void> watchExpenseCategory() { | ||||
| } | ||||
| 
 | ||||
| Stream<void> watchBudgets(Account account) { | ||||
|   return GetIt.I.get<Isar>().budgets.filter().account((q) => q.idEqualTo(account.id)).watchLazy(fireImmediately: true); | ||||
|   return GetIt.I | ||||
|       .get<Isar>() | ||||
|       .budgets | ||||
|       .filter() | ||||
|       .account((q) => q.idEqualTo(account.id)) | ||||
|       .watchLazy(fireImmediately: true); | ||||
| } | ||||
| 
 | ||||
| Future<List<Budget>> getBudgets(Account? account) { | ||||
| @ -219,7 +224,12 @@ Future<List<Budget>> getBudgets(Account? account) { | ||||
|     return Future.value([]); | ||||
|   } | ||||
| 
 | ||||
|   return GetIt.I.get<Isar>().budgets.filter().account((q) => q.idEqualTo(account.id)).findAll(); | ||||
|   return GetIt.I | ||||
|       .get<Isar>() | ||||
|       .budgets | ||||
|       .filter() | ||||
|       .account((q) => q.idEqualTo(account.id)) | ||||
|       .findAll(); | ||||
| } | ||||
| 
 | ||||
| Future<void> upsertBudget(Budget budget) { | ||||
| @ -239,11 +249,13 @@ Future<void> upsertBudgetItem(BudgetItem item) { | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| enum TransactionQueryDateOption { | ||||
|   thisMonth, | ||||
| } | ||||
| enum TransactionQueryDateOption { thisMonth } | ||||
| 
 | ||||
| Future<List<Transaction>> getTransactionsInTimeframe(Account account, DateTime today, TransactionQueryDateOption option) async { | ||||
| Future<List<Transaction>> getTransactionsInTimeframe( | ||||
|   Account account, | ||||
|   DateTime today, | ||||
|   TransactionQueryDateOption option, | ||||
| ) async { | ||||
|   final lower = switch (option) { | ||||
|     TransactionQueryDateOption.thisMonth => DateTime( | ||||
|       today.year, | ||||
| @ -255,10 +267,11 @@ Future<List<Transaction>> getTransactionsInTimeframe(Account account, DateTime t | ||||
|     TransactionQueryDateOption.thisMonth => monthEnding(today), | ||||
|   }; | ||||
| 
 | ||||
|   return GetIt.I.get<Isar>() | ||||
|   return GetIt.I | ||||
|       .get<Isar>() | ||||
|       .transactions | ||||
|       .filter() | ||||
|       .account((q) => q.idEqualTo(account.id)) | ||||
|       .dateBetween(lower, upper) | ||||
|       .findAll(); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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<AccountListPage> { | ||||
|             ), | ||||
| 
 | ||||
|             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: [], | ||||
|                   ), | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|           ], | ||||
|  | ||||
| @ -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<CoreCubit>(); | ||||
|     return Card( | ||||
|       child: Padding( | ||||
|         padding: const EdgeInsets.all(8), | ||||
|         child: BlocBuilder<CoreCubit, CoreState>( | ||||
|           builder: (context, state) { | ||||
|             if (bloc.activeAccount == null) { | ||||
|               return Text("No active account"); | ||||
|     return BlocBuilder<CoreCubit, CoreState>( | ||||
|       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<CoreCubit, CoreState>( | ||||
|         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(), | ||||
|               ); | ||||
|             }, | ||||
|           ); | ||||
|         }, | ||||
|       ), | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| @ -29,7 +29,7 @@ class TotalBalanceCard extends StatelessWidget { | ||||
|               mainAxisSize: MainAxisSize.min, | ||||
|               children: [ | ||||
|                 Text( | ||||
|                     "Total balance", | ||||
|                   "Total balance", | ||||
|                   style: Theme.of(context).textTheme.titleLarge, | ||||
|                 ), | ||||
|                 FutureBuilder( | ||||
|  | ||||
| @ -23,44 +23,45 @@ class AddBudgetState extends State<AddBudgetPopup> { | ||||
|       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<CoreCubit>(); | ||||
|                   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<CoreCubit>(); | ||||
|                 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"), | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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<AddBudgetItemPopup> { | ||||
|             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"), | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -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), | ||||
|  | ||||
| @ -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(); | ||||
|                       }, | ||||
|                     ), | ||||
|               ); | ||||
|             }, | ||||
|           ), | ||||
|         ), | ||||
|       ], | ||||
|  | ||||
| @ -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<EditBudgetPopup> { | ||||
|   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<EditBudgetPopup> { | ||||
|           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"), | ||||
|             ), | ||||
|           ], | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -99,9 +99,7 @@ class CoreCubit extends Cubit<CoreState> { | ||||
|       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!))); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
| @ -12,7 +12,8 @@ part of 'core.dart'; | ||||
| T _$identity<T>(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<Account> accounts, | ||||
|       List<RecurringTransaction> recurringTransactions, | ||||
|       List<Transaction> transactions, | ||||
|       List<TransactionTemplate> transactionTemplates, | ||||
|       List<Beneficiary> beneficiaries, | ||||
|       List<ExpenseCategory> expenseCategories, | ||||
|       List<Budget> budgets, | ||||
|       Budget? activeBudget}); | ||||
|   $Res call({ | ||||
|     OkanePage activePage, | ||||
|     int? activeAccountIndex, | ||||
|     Transaction? activeTransaction, | ||||
|     List<Account> accounts, | ||||
|     List<RecurringTransaction> recurringTransactions, | ||||
|     List<Transaction> transactions, | ||||
|     List<TransactionTemplate> transactionTemplates, | ||||
|     List<Beneficiary> beneficiaries, | ||||
|     List<ExpenseCategory> expenseCategories, | ||||
|     List<Budget> 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<Account>, | ||||
|       recurringTransactions: null == recurringTransactions | ||||
|           ? _value.recurringTransactions | ||||
|           : recurringTransactions // ignore: cast_nullable_to_non_nullable | ||||
|               as List<RecurringTransaction>, | ||||
|       transactions: null == transactions | ||||
|           ? _value.transactions | ||||
|           : transactions // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Transaction>, | ||||
|       transactionTemplates: null == transactionTemplates | ||||
|           ? _value.transactionTemplates | ||||
|           : transactionTemplates // ignore: cast_nullable_to_non_nullable | ||||
|               as List<TransactionTemplate>, | ||||
|       beneficiaries: null == beneficiaries | ||||
|           ? _value.beneficiaries | ||||
|           : beneficiaries // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Beneficiary>, | ||||
|       expenseCategories: null == expenseCategories | ||||
|           ? _value.expenseCategories | ||||
|           : expenseCategories // ignore: cast_nullable_to_non_nullable | ||||
|               as List<ExpenseCategory>, | ||||
|       budgets: null == budgets | ||||
|           ? _value.budgets | ||||
|           : budgets // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Budget>, | ||||
|       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<Account>, | ||||
|             recurringTransactions: | ||||
|                 null == recurringTransactions | ||||
|                     ? _value.recurringTransactions | ||||
|                     : recurringTransactions // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<RecurringTransaction>, | ||||
|             transactions: | ||||
|                 null == transactions | ||||
|                     ? _value.transactions | ||||
|                     : transactions // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<Transaction>, | ||||
|             transactionTemplates: | ||||
|                 null == transactionTemplates | ||||
|                     ? _value.transactionTemplates | ||||
|                     : transactionTemplates // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<TransactionTemplate>, | ||||
|             beneficiaries: | ||||
|                 null == beneficiaries | ||||
|                     ? _value.beneficiaries | ||||
|                     : beneficiaries // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<Beneficiary>, | ||||
|             expenseCategories: | ||||
|                 null == expenseCategories | ||||
|                     ? _value.expenseCategories | ||||
|                     : expenseCategories // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<ExpenseCategory>, | ||||
|             budgets: | ||||
|                 null == budgets | ||||
|                     ? _value.budgets | ||||
|                     : budgets // ignore: cast_nullable_to_non_nullable | ||||
|                         as List<Budget>, | ||||
|             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<Account> accounts, | ||||
|       List<RecurringTransaction> recurringTransactions, | ||||
|       List<Transaction> transactions, | ||||
|       List<TransactionTemplate> transactionTemplates, | ||||
|       List<Beneficiary> beneficiaries, | ||||
|       List<ExpenseCategory> expenseCategories, | ||||
|       List<Budget> budgets, | ||||
|       Budget? activeBudget}); | ||||
|   $Res call({ | ||||
|     OkanePage activePage, | ||||
|     int? activeAccountIndex, | ||||
|     Transaction? activeTransaction, | ||||
|     List<Account> accounts, | ||||
|     List<RecurringTransaction> recurringTransactions, | ||||
|     List<Transaction> transactions, | ||||
|     List<TransactionTemplate> transactionTemplates, | ||||
|     List<Beneficiary> beneficiaries, | ||||
|     List<ExpenseCategory> expenseCategories, | ||||
|     List<Budget> 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<Account>, | ||||
|       recurringTransactions: null == recurringTransactions | ||||
|           ? _value._recurringTransactions | ||||
|           : recurringTransactions // ignore: cast_nullable_to_non_nullable | ||||
|               as List<RecurringTransaction>, | ||||
|       transactions: null == transactions | ||||
|           ? _value._transactions | ||||
|           : transactions // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Transaction>, | ||||
|       transactionTemplates: null == transactionTemplates | ||||
|           ? _value._transactionTemplates | ||||
|           : transactionTemplates // ignore: cast_nullable_to_non_nullable | ||||
|               as List<TransactionTemplate>, | ||||
|       beneficiaries: null == beneficiaries | ||||
|           ? _value._beneficiaries | ||||
|           : beneficiaries // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Beneficiary>, | ||||
|       expenseCategories: null == expenseCategories | ||||
|           ? _value._expenseCategories | ||||
|           : expenseCategories // ignore: cast_nullable_to_non_nullable | ||||
|               as List<ExpenseCategory>, | ||||
|       budgets: null == budgets | ||||
|           ? _value._budgets | ||||
|           : budgets // ignore: cast_nullable_to_non_nullable | ||||
|               as List<Budget>, | ||||
|       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<Account>, | ||||
|         recurringTransactions: | ||||
|             null == recurringTransactions | ||||
|                 ? _value._recurringTransactions | ||||
|                 : recurringTransactions // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<RecurringTransaction>, | ||||
|         transactions: | ||||
|             null == transactions | ||||
|                 ? _value._transactions | ||||
|                 : transactions // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<Transaction>, | ||||
|         transactionTemplates: | ||||
|             null == transactionTemplates | ||||
|                 ? _value._transactionTemplates | ||||
|                 : transactionTemplates // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<TransactionTemplate>, | ||||
|         beneficiaries: | ||||
|             null == beneficiaries | ||||
|                 ? _value._beneficiaries | ||||
|                 : beneficiaries // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<Beneficiary>, | ||||
|         expenseCategories: | ||||
|             null == expenseCategories | ||||
|                 ? _value._expenseCategories | ||||
|                 : expenseCategories // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<ExpenseCategory>, | ||||
|         budgets: | ||||
|             null == budgets | ||||
|                 ? _value._budgets | ||||
|                 : budgets // ignore: cast_nullable_to_non_nullable | ||||
|                     as List<Budget>, | ||||
|         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<Account> accounts = const [], | ||||
|       final List<RecurringTransaction> recurringTransactions = const [], | ||||
|       final List<Transaction> transactions = const [], | ||||
|       final List<TransactionTemplate> transactionTemplates = const [], | ||||
|       final List<Beneficiary> beneficiaries = const [], | ||||
|       final List<ExpenseCategory> expenseCategories = const [], | ||||
|       final List<Budget> 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<Account> accounts = const [], | ||||
|     final List<RecurringTransaction> recurringTransactions = const [], | ||||
|     final List<Transaction> transactions = const [], | ||||
|     final List<TransactionTemplate> transactionTemplates = const [], | ||||
|     final List<Beneficiary> beneficiaries = const [], | ||||
|     final List<ExpenseCategory> expenseCategories = const [], | ||||
|     final List<Budget> 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<Account> accounts, | ||||
|       final List<RecurringTransaction> recurringTransactions, | ||||
|       final List<Transaction> transactions, | ||||
|       final List<TransactionTemplate> transactionTemplates, | ||||
|       final List<Beneficiary> beneficiaries, | ||||
|       final List<ExpenseCategory> expenseCategories, | ||||
|       final List<Budget> budgets, | ||||
|       final Budget? activeBudget}) = _$CoreStateImpl; | ||||
|   const factory _CoreState({ | ||||
|     final OkanePage activePage, | ||||
|     final int? activeAccountIndex, | ||||
|     final Transaction? activeTransaction, | ||||
|     final List<Account> accounts, | ||||
|     final List<RecurringTransaction> recurringTransactions, | ||||
|     final List<Transaction> transactions, | ||||
|     final List<TransactionTemplate> transactionTemplates, | ||||
|     final List<Beneficiary> beneficiaries, | ||||
|     final List<ExpenseCategory> expenseCategories, | ||||
|     final List<Budget> budgets, | ||||
|     final Budget? activeBudget, | ||||
|   }) = _$CoreStateImpl; | ||||
| 
 | ||||
|   @override | ||||
|   OkanePage get activePage; | ||||
|  | ||||
| @ -17,7 +17,7 @@ Future<T?> showDialogOrModal<T>({ | ||||
|       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, | ||||
|   ); | ||||
| } | ||||
|   return DateTime(now.year, now.month, 32, 23, 59, 59); | ||||
| } | ||||
|  | ||||
| @ -22,8 +22,7 @@ class AccountIndicator extends StatelessWidget { | ||||
|             ), | ||||
|           ), | ||||
|           const Spacer(), | ||||
|           if (trailing != null) | ||||
|             trailing!, | ||||
|           if (trailing != null) trailing!, | ||||
|         ], | ||||
|       ), | ||||
|     ); | ||||
|  | ||||
							
								
								
									
										84
									
								
								lib/ui/widgets/piechart.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lib/ui/widgets/piechart.dart
									
									
									
									
									
										Normal file
									
								
							| @ -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<OkanePieChartSection> 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(), | ||||
|           ), | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										82
									
								
								lib/ui/widgets/piechart_card.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								lib/ui/widgets/piechart_card.dart
									
									
									
									
									
										Normal file
									
								
							| @ -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<OkanePieChartSection> 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); | ||||
|   } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user