> allOffsets,
+) {
+ final object = AppConfig();
+ object.configKey = reader.readString(offsets[1]);
+ object.createdAt = reader.readDateTime(offsets[2]);
+ object.entitlementSource = _AppConfigentitlementSourceValueEnumMap[
+ reader.readByteOrNull(offsets[3])] ??
+ EntitlementSource.none;
+ object.freeTrialLimit = reader.readLong(offsets[4]);
+ object.id = id;
+ object.isVipUnlocked = reader.readBool(offsets[5]);
+ object.lastIapErrorMessage = reader.readStringOrNull(offsets[6]);
+ object.updatedAt = reader.readDateTime(offsets[8]);
+ object.usedTrialCount = reader.readLong(offsets[9]);
+ object.vipUnlockedAt = reader.readDateTimeOrNull(offsets[10]);
+ return object;
+}
+
+P _appConfigDeserializeProp(
+ IsarReader reader,
+ int propertyId,
+ int offset,
+ Map> allOffsets,
+) {
+ switch (propertyId) {
+ case 0:
+ return (reader.readBool(offset)) as P;
+ case 1:
+ return (reader.readString(offset)) as P;
+ case 2:
+ return (reader.readDateTime(offset)) as P;
+ case 3:
+ return (_AppConfigentitlementSourceValueEnumMap[
+ reader.readByteOrNull(offset)] ??
+ EntitlementSource.none) as P;
+ case 4:
+ return (reader.readLong(offset)) as P;
+ case 5:
+ return (reader.readBool(offset)) as P;
+ case 6:
+ return (reader.readStringOrNull(offset)) as P;
+ case 7:
+ return (reader.readLong(offset)) as P;
+ case 8:
+ return (reader.readDateTime(offset)) as P;
+ case 9:
+ return (reader.readLong(offset)) as P;
+ case 10:
+ return (reader.readDateTimeOrNull(offset)) as P;
+ default:
+ throw IsarError('Unknown property with id $propertyId');
+ }
+}
+
+const _AppConfigentitlementSourceEnumValueMap = {
+ 'none': 0,
+ 'purchase': 1,
+ 'restore': 2,
+};
+const _AppConfigentitlementSourceValueEnumMap = {
+ 0: EntitlementSource.none,
+ 1: EntitlementSource.purchase,
+ 2: EntitlementSource.restore,
+};
+
+Id _appConfigGetId(AppConfig object) {
+ return object.id;
+}
+
+List> _appConfigGetLinks(AppConfig object) {
+ return [];
+}
+
+void _appConfigAttach(IsarCollection col, Id id, AppConfig object) {
+ object.id = id;
+}
+
+extension AppConfigByIndex on IsarCollection {
+ Future getByConfigKey(String configKey) {
+ return getByIndex(r'configKey', [configKey]);
+ }
+
+ AppConfig? getByConfigKeySync(String configKey) {
+ return getByIndexSync(r'configKey', [configKey]);
+ }
+
+ Future deleteByConfigKey(String configKey) {
+ return deleteByIndex(r'configKey', [configKey]);
+ }
+
+ bool deleteByConfigKeySync(String configKey) {
+ return deleteByIndexSync(r'configKey', [configKey]);
+ }
+
+ Future> getAllByConfigKey(List configKeyValues) {
+ final values = configKeyValues.map((e) => [e]).toList();
+ return getAllByIndex(r'configKey', values);
+ }
+
+ List getAllByConfigKeySync(List configKeyValues) {
+ final values = configKeyValues.map((e) => [e]).toList();
+ return getAllByIndexSync(r'configKey', values);
+ }
+
+ Future deleteAllByConfigKey(List configKeyValues) {
+ final values = configKeyValues.map((e) => [e]).toList();
+ return deleteAllByIndex(r'configKey', values);
+ }
+
+ int deleteAllByConfigKeySync(List configKeyValues) {
+ final values = configKeyValues.map((e) => [e]).toList();
+ return deleteAllByIndexSync(r'configKey', values);
+ }
+
+ Future putByConfigKey(AppConfig object) {
+ return putByIndex(r'configKey', object);
+ }
+
+ Id putByConfigKeySync(AppConfig object, {bool saveLinks = true}) {
+ return putByIndexSync(r'configKey', object, saveLinks: saveLinks);
+ }
+
+ Future> putAllByConfigKey(List objects) {
+ return putAllByIndex(r'configKey', objects);
+ }
+
+ List putAllByConfigKeySync(List objects,
+ {bool saveLinks = true}) {
+ return putAllByIndexSync(r'configKey', objects, saveLinks: saveLinks);
+ }
+}
+
+extension AppConfigQueryWhereSort
+ on QueryBuilder {
+ QueryBuilder anyId() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(const IdWhereClause.any());
+ });
+ }
+
+ QueryBuilder anyUpdatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ const IndexWhereClause.any(indexName: r'updatedAt'),
+ );
+ });
+ }
+}
+
+extension AppConfigQueryWhere
+ on QueryBuilder {
+ QueryBuilder idEqualTo(Id id) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IdWhereClause.between(
+ lower: id,
+ upper: id,
+ ));
+ });
+ }
+
+ QueryBuilder idNotEqualTo(Id id) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: false),
+ )
+ .addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: false),
+ );
+ } else {
+ return query
+ .addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: false),
+ )
+ .addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: false),
+ );
+ }
+ });
+ }
+
+ QueryBuilder idGreaterThan(Id id,
+ {bool include = false}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: include),
+ );
+ });
+ }
+
+ QueryBuilder idLessThan(Id id,
+ {bool include = false}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: include),
+ );
+ });
+ }
+
+ QueryBuilder 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,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyEqualTo(
+ String configKey) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.equalTo(
+ indexName: r'configKey',
+ value: [configKey],
+ ));
+ });
+ }
+
+ QueryBuilder configKeyNotEqualTo(
+ String configKey) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'configKey',
+ lower: [],
+ upper: [configKey],
+ includeUpper: false,
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'configKey',
+ lower: [configKey],
+ includeLower: false,
+ upper: [],
+ ));
+ } else {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'configKey',
+ lower: [configKey],
+ includeLower: false,
+ upper: [],
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'configKey',
+ lower: [],
+ upper: [configKey],
+ includeUpper: false,
+ ));
+ }
+ });
+ }
+
+ QueryBuilder updatedAtEqualTo(
+ DateTime updatedAt) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.equalTo(
+ indexName: r'updatedAt',
+ value: [updatedAt],
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtNotEqualTo(
+ DateTime updatedAt) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: false,
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: false,
+ upper: [],
+ ));
+ } else {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: false,
+ upper: [],
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: false,
+ ));
+ }
+ });
+ }
+
+ QueryBuilder updatedAtGreaterThan(
+ DateTime updatedAt, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: include,
+ upper: [],
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtLessThan(
+ DateTime updatedAt, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: include,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtBetween(
+ DateTime lowerUpdatedAt,
+ DateTime upperUpdatedAt, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [lowerUpdatedAt],
+ includeLower: includeLower,
+ upper: [upperUpdatedAt],
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+}
+
+extension AppConfigQueryFilter
+ on QueryBuilder {
+ QueryBuilder
+ canStartScoringEqualTo(bool value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'canStartScoring',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyEqualTo(
+ String value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ configKeyGreaterThan(
+ String value, {
+ bool include = false,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyLessThan(
+ String value, {
+ bool include = false,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyBetween(
+ String lower,
+ String upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'configKey',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyStartsWith(
+ String value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.startsWith(
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyEndsWith(
+ String value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.endsWith(
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyContains(
+ String value,
+ {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.contains(
+ property: r'configKey',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyMatches(
+ String pattern,
+ {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.matches(
+ property: r'configKey',
+ wildcard: pattern,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder configKeyIsEmpty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'configKey',
+ value: '',
+ ));
+ });
+ }
+
+ QueryBuilder
+ configKeyIsNotEmpty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ property: r'configKey',
+ value: '',
+ ));
+ });
+ }
+
+ QueryBuilder createdAtEqualTo(
+ DateTime value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'createdAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ createdAtGreaterThan(
+ DateTime value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'createdAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder createdAtLessThan(
+ DateTime value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'createdAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder createdAtBetween(
+ DateTime lower,
+ DateTime upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'createdAt',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder
+ entitlementSourceEqualTo(EntitlementSource value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'entitlementSource',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ entitlementSourceGreaterThan(
+ EntitlementSource value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'entitlementSource',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ entitlementSourceLessThan(
+ EntitlementSource value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'entitlementSource',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ entitlementSourceBetween(
+ EntitlementSource lower,
+ EntitlementSource upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'entitlementSource',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder
+ freeTrialLimitEqualTo(int value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'freeTrialLimit',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ freeTrialLimitGreaterThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'freeTrialLimit',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ freeTrialLimitLessThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'freeTrialLimit',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ freeTrialLimitBetween(
+ int lower,
+ int upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'freeTrialLimit',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder idEqualTo(
+ Id value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'id',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder idGreaterThan(
+ Id value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'id',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder idLessThan(
+ Id value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'id',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder 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,
+ ));
+ });
+ }
+
+ QueryBuilder
+ isVipUnlockedEqualTo(bool value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'isVipUnlocked',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageIsNull() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(const FilterCondition.isNull(
+ property: r'lastIapErrorMessage',
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageIsNotNull() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(const FilterCondition.isNotNull(
+ property: r'lastIapErrorMessage',
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageEqualTo(
+ String? value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageGreaterThan(
+ String? value, {
+ bool include = false,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageLessThan(
+ String? value, {
+ bool include = false,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageBetween(
+ String? lower,
+ String? upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'lastIapErrorMessage',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageStartsWith(
+ String value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.startsWith(
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageEndsWith(
+ String value, {
+ bool caseSensitive = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.endsWith(
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageContains(String value, {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.contains(
+ property: r'lastIapErrorMessage',
+ value: value,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageMatches(String pattern, {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.matches(
+ property: r'lastIapErrorMessage',
+ wildcard: pattern,
+ caseSensitive: caseSensitive,
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageIsEmpty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'lastIapErrorMessage',
+ value: '',
+ ));
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageIsNotEmpty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ property: r'lastIapErrorMessage',
+ value: '',
+ ));
+ });
+ }
+
+ QueryBuilder
+ remainingTrialCountEqualTo(int value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'remainingTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ remainingTrialCountGreaterThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'remainingTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ remainingTrialCountLessThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'remainingTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ remainingTrialCountBetween(
+ int lower,
+ int upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'remainingTrialCount',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtEqualTo(
+ DateTime value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'updatedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ updatedAtGreaterThan(
+ DateTime value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'updatedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtLessThan(
+ DateTime value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'updatedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtBetween(
+ DateTime lower,
+ DateTime upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'updatedAt',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder
+ usedTrialCountEqualTo(int value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'usedTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ usedTrialCountGreaterThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'usedTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ usedTrialCountLessThan(
+ int value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'usedTrialCount',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ usedTrialCountBetween(
+ int lower,
+ int upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'usedTrialCount',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtIsNull() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(const FilterCondition.isNull(
+ property: r'vipUnlockedAt',
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtIsNotNull() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(const FilterCondition.isNotNull(
+ property: r'vipUnlockedAt',
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtEqualTo(DateTime? value) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.equalTo(
+ property: r'vipUnlockedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtGreaterThan(
+ DateTime? value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.greaterThan(
+ include: include,
+ property: r'vipUnlockedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtLessThan(
+ DateTime? value, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.lessThan(
+ include: include,
+ property: r'vipUnlockedAt',
+ value: value,
+ ));
+ });
+ }
+
+ QueryBuilder
+ vipUnlockedAtBetween(
+ DateTime? lower,
+ DateTime? upper, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addFilterCondition(FilterCondition.between(
+ property: r'vipUnlockedAt',
+ lower: lower,
+ includeLower: includeLower,
+ upper: upper,
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+}
+
+extension AppConfigQueryObject
+ on QueryBuilder {}
+
+extension AppConfigQueryLinks
+ on QueryBuilder {}
+
+extension AppConfigQuerySortBy on QueryBuilder {
+ QueryBuilder sortByCanStartScoring() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'canStartScoring', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByCanStartScoringDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'canStartScoring', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByConfigKey() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'configKey', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByConfigKeyDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'configKey', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByCreatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'createdAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByCreatedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'createdAt', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByEntitlementSource() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'entitlementSource', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ sortByEntitlementSourceDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'entitlementSource', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByFreeTrialLimit() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'freeTrialLimit', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByFreeTrialLimitDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'freeTrialLimit', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByIsVipUnlocked() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'isVipUnlocked', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByIsVipUnlockedDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'isVipUnlocked', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByLastIapErrorMessage() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'lastIapErrorMessage', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ sortByLastIapErrorMessageDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'lastIapErrorMessage', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByRemainingTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'remainingTrialCount', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ sortByRemainingTrialCountDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'remainingTrialCount', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByUpdatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'updatedAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByUpdatedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'updatedAt', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByUsedTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'usedTrialCount', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByUsedTrialCountDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'usedTrialCount', Sort.desc);
+ });
+ }
+
+ QueryBuilder sortByVipUnlockedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'vipUnlockedAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder sortByVipUnlockedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'vipUnlockedAt', Sort.desc);
+ });
+ }
+}
+
+extension AppConfigQuerySortThenBy
+ on QueryBuilder {
+ QueryBuilder thenByCanStartScoring() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'canStartScoring', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByCanStartScoringDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'canStartScoring', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByConfigKey() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'configKey', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByConfigKeyDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'configKey', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByCreatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'createdAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByCreatedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'createdAt', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByEntitlementSource() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'entitlementSource', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ thenByEntitlementSourceDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'entitlementSource', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByFreeTrialLimit() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'freeTrialLimit', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByFreeTrialLimitDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'freeTrialLimit', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenById() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'id', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByIdDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'id', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByIsVipUnlocked() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'isVipUnlocked', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByIsVipUnlockedDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'isVipUnlocked', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByLastIapErrorMessage() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'lastIapErrorMessage', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ thenByLastIapErrorMessageDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'lastIapErrorMessage', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByRemainingTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'remainingTrialCount', Sort.asc);
+ });
+ }
+
+ QueryBuilder
+ thenByRemainingTrialCountDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'remainingTrialCount', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByUpdatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'updatedAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByUpdatedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'updatedAt', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByUsedTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'usedTrialCount', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByUsedTrialCountDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'usedTrialCount', Sort.desc);
+ });
+ }
+
+ QueryBuilder thenByVipUnlockedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'vipUnlockedAt', Sort.asc);
+ });
+ }
+
+ QueryBuilder thenByVipUnlockedAtDesc() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addSortBy(r'vipUnlockedAt', Sort.desc);
+ });
+ }
+}
+
+extension AppConfigQueryWhereDistinct
+ on QueryBuilder {
+ QueryBuilder distinctByCanStartScoring() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'canStartScoring');
+ });
+ }
+
+ QueryBuilder distinctByConfigKey(
+ {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'configKey', caseSensitive: caseSensitive);
+ });
+ }
+
+ QueryBuilder distinctByCreatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'createdAt');
+ });
+ }
+
+ QueryBuilder distinctByEntitlementSource() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'entitlementSource');
+ });
+ }
+
+ QueryBuilder distinctByFreeTrialLimit() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'freeTrialLimit');
+ });
+ }
+
+ QueryBuilder distinctByIsVipUnlocked() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'isVipUnlocked');
+ });
+ }
+
+ QueryBuilder distinctByLastIapErrorMessage(
+ {bool caseSensitive = true}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'lastIapErrorMessage',
+ caseSensitive: caseSensitive);
+ });
+ }
+
+ QueryBuilder
+ distinctByRemainingTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'remainingTrialCount');
+ });
+ }
+
+ QueryBuilder distinctByUpdatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'updatedAt');
+ });
+ }
+
+ QueryBuilder distinctByUsedTrialCount() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'usedTrialCount');
+ });
+ }
+
+ QueryBuilder distinctByVipUnlockedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addDistinctBy(r'vipUnlockedAt');
+ });
+ }
+}
+
+extension AppConfigQueryProperty
+ on QueryBuilder {
+ QueryBuilder idProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'id');
+ });
+ }
+
+ QueryBuilder canStartScoringProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'canStartScoring');
+ });
+ }
+
+ QueryBuilder configKeyProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'configKey');
+ });
+ }
+
+ QueryBuilder createdAtProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'createdAt');
+ });
+ }
+
+ QueryBuilder
+ entitlementSourceProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'entitlementSource');
+ });
+ }
+
+ QueryBuilder freeTrialLimitProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'freeTrialLimit');
+ });
+ }
+
+ QueryBuilder isVipUnlockedProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'isVipUnlocked');
+ });
+ }
+
+ QueryBuilder
+ lastIapErrorMessageProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'lastIapErrorMessage');
+ });
+ }
+
+ QueryBuilder remainingTrialCountProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'remainingTrialCount');
+ });
+ }
+
+ QueryBuilder updatedAtProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'updatedAt');
+ });
+ }
+
+ QueryBuilder usedTrialCountProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'usedTrialCount');
+ });
+ }
+
+ QueryBuilder vipUnlockedAtProperty() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addPropertyName(r'vipUnlockedAt');
+ });
+ }
+}
diff --git a/lib/data/local/models/models.dart b/lib/data/local/models/models.dart
new file mode 100644
index 0000000..830229c
--- /dev/null
+++ b/lib/data/local/models/models.dart
@@ -0,0 +1,3 @@
+export 'app_config.dart';
+export 'point_record.dart';
+export 'user_profile.dart';
diff --git a/lib/data/local/models/point_record.dart b/lib/data/local/models/point_record.dart
new file mode 100644
index 0000000..3b58f51
--- /dev/null
+++ b/lib/data/local/models/point_record.dart
@@ -0,0 +1,151 @@
+import 'package:isar/isar.dart';
+
+part 'point_record.g.dart';
+
+enum PointRecordStatus {
+ draft,
+ completed,
+}
+
+enum BowType {
+ recurve,
+ compound,
+ barebow,
+ traditional,
+ longbow,
+ other,
+}
+
+enum TargetFaceType {
+ cm40,
+ cm60,
+ cm80,
+ cm122,
+ vegas3Spot,
+ vertical3Spot,
+ custom,
+}
+
+@embedded
+class HitPoint {
+ HitPoint({
+ this.arrowIndex = 0,
+ this.endIndex = 0,
+ this.normalizedX = 0,
+ this.normalizedY = 0,
+ this.score,
+ this.isMiss = false,
+ });
+
+ int arrowIndex;
+ int endIndex;
+
+ /// Range: -1.0 ~ 1.0. The painter can map the normalized coordinate
+ /// directly onto different target canvases.
+ double normalizedX;
+ double normalizedY;
+
+ int? score;
+ bool isMiss;
+}
+
+@collection
+class PointRecord {
+ PointRecord();
+
+ Id id = Isar.autoIncrement;
+
+ @Index(type: IndexType.value)
+ late DateTime updatedAt;
+
+ @Index(type: IndexType.value)
+ late DateTime createdAt;
+
+ @Index(type: IndexType.value)
+ DateTime? completedAt;
+
+ @enumerated
+ PointRecordStatus status = PointRecordStatus.draft;
+
+ @enumerated
+ BowType bowType = BowType.recurve;
+
+ @enumerated
+ TargetFaceType targetFaceType = TargetFaceType.cm40;
+
+ late String title;
+ int distanceMeters = 18;
+ int endCount = 6;
+ int arrowsPerEnd = 6;
+ String? note;
+ List scores = [];
+ List hitPoints = [];
+
+ bool get isDraft => status == PointRecordStatus.draft;
+ int get totalArrows => scores.length;
+ int get totalScore => scores.fold(0, (sum, item) => sum + item);
+ double? get averageScore =>
+ scores.isEmpty ? null : totalScore / scores.length;
+
+ factory PointRecord.createDraft({
+ required BowType bowType,
+ required TargetFaceType targetFaceType,
+ required int distanceMeters,
+ required int endCount,
+ required int arrowsPerEnd,
+ String? title,
+ DateTime? now,
+ }) {
+ final current = now ?? DateTime.now();
+
+ return PointRecord()
+ ..title = title ?? '未完成记分'
+ ..status = PointRecordStatus.draft
+ ..bowType = bowType
+ ..targetFaceType = targetFaceType
+ ..distanceMeters = distanceMeters
+ ..endCount = endCount
+ ..arrowsPerEnd = arrowsPerEnd
+ ..createdAt = current
+ ..updatedAt = current;
+ }
+
+ PointRecord markCompleted({DateTime? completedAt}) {
+ final current = completedAt ?? DateTime.now();
+
+ return PointRecord()
+ ..id = id
+ ..title = title
+ ..status = PointRecordStatus.completed
+ ..bowType = bowType
+ ..targetFaceType = targetFaceType
+ ..distanceMeters = distanceMeters
+ ..endCount = endCount
+ ..arrowsPerEnd = arrowsPerEnd
+ ..note = note
+ ..scores = List.from(scores)
+ ..hitPoints = List.from(hitPoints)
+ ..createdAt = createdAt
+ ..updatedAt = current
+ ..completedAt = current;
+ }
+
+ /// Returns a draft copy with updated scores/hit points (used while editing).
+ PointRecord copyWithScores(List scores, List hitPoints) {
+ return PointRecord()
+ ..id = id
+ ..title = title
+ ..status = status
+ ..bowType = bowType
+ ..targetFaceType = targetFaceType
+ ..distanceMeters = distanceMeters
+ ..endCount = endCount
+ ..arrowsPerEnd = arrowsPerEnd
+ ..note = note
+ ..scores = List.from(scores)
+ ..hitPoints = List.from(hitPoints)
+ ..createdAt = createdAt
+ ..updatedAt = DateTime.now()
+ ..completedAt = completedAt;
+ }
+}
diff --git a/lib/data/local/models/point_record.g.dart b/lib/data/local/models/point_record.g.dart
new file mode 100644
index 0000000..aa66c58
--- /dev/null
+++ b/lib/data/local/models/point_record.g.dart
@@ -0,0 +1,3098 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'point_record.dart';
+
+// **************************************************************************
+// IsarCollectionGenerator
+// **************************************************************************
+
+// coverage:ignore-file
+// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
+
+extension GetPointRecordCollection on Isar {
+ IsarCollection get pointRecords => this.collection();
+}
+
+const PointRecordSchema = CollectionSchema(
+ name: r'PointRecord',
+ id: 733086018020266618,
+ properties: {
+ r'arrowsPerEnd': PropertySchema(
+ id: 0,
+ name: r'arrowsPerEnd',
+ type: IsarType.long,
+ ),
+ r'averageScore': PropertySchema(
+ id: 1,
+ name: r'averageScore',
+ type: IsarType.double,
+ ),
+ r'bowType': PropertySchema(
+ id: 2,
+ name: r'bowType',
+ type: IsarType.byte,
+ enumMap: _PointRecordbowTypeEnumValueMap,
+ ),
+ r'completedAt': PropertySchema(
+ id: 3,
+ name: r'completedAt',
+ type: IsarType.dateTime,
+ ),
+ r'createdAt': PropertySchema(
+ id: 4,
+ name: r'createdAt',
+ type: IsarType.dateTime,
+ ),
+ r'distanceMeters': PropertySchema(
+ id: 5,
+ name: r'distanceMeters',
+ type: IsarType.long,
+ ),
+ r'endCount': PropertySchema(
+ id: 6,
+ name: r'endCount',
+ type: IsarType.long,
+ ),
+ r'hitPoints': PropertySchema(
+ id: 7,
+ name: r'hitPoints',
+ type: IsarType.objectList,
+ target: r'HitPoint',
+ ),
+ r'isDraft': PropertySchema(
+ id: 8,
+ name: r'isDraft',
+ type: IsarType.bool,
+ ),
+ r'note': PropertySchema(
+ id: 9,
+ name: r'note',
+ type: IsarType.string,
+ ),
+ r'scores': PropertySchema(
+ id: 10,
+ name: r'scores',
+ type: IsarType.longList,
+ ),
+ r'status': PropertySchema(
+ id: 11,
+ name: r'status',
+ type: IsarType.byte,
+ enumMap: _PointRecordstatusEnumValueMap,
+ ),
+ r'targetFaceType': PropertySchema(
+ id: 12,
+ name: r'targetFaceType',
+ type: IsarType.byte,
+ enumMap: _PointRecordtargetFaceTypeEnumValueMap,
+ ),
+ r'title': PropertySchema(
+ id: 13,
+ name: r'title',
+ type: IsarType.string,
+ ),
+ r'totalArrows': PropertySchema(
+ id: 14,
+ name: r'totalArrows',
+ type: IsarType.long,
+ ),
+ r'totalScore': PropertySchema(
+ id: 15,
+ name: r'totalScore',
+ type: IsarType.long,
+ ),
+ r'updatedAt': PropertySchema(
+ id: 16,
+ name: r'updatedAt',
+ type: IsarType.dateTime,
+ )
+ },
+ estimateSize: _pointRecordEstimateSize,
+ serialize: _pointRecordSerialize,
+ deserialize: _pointRecordDeserialize,
+ deserializeProp: _pointRecordDeserializeProp,
+ idName: r'id',
+ indexes: {
+ r'updatedAt': IndexSchema(
+ id: -6238191080293565125,
+ name: r'updatedAt',
+ unique: false,
+ replace: false,
+ properties: [
+ IndexPropertySchema(
+ name: r'updatedAt',
+ type: IndexType.value,
+ caseSensitive: false,
+ )
+ ],
+ ),
+ r'createdAt': IndexSchema(
+ id: -3433535483987302584,
+ name: r'createdAt',
+ unique: false,
+ replace: false,
+ properties: [
+ IndexPropertySchema(
+ name: r'createdAt',
+ type: IndexType.value,
+ caseSensitive: false,
+ )
+ ],
+ ),
+ r'completedAt': IndexSchema(
+ id: -3156591011457686752,
+ name: r'completedAt',
+ unique: false,
+ replace: false,
+ properties: [
+ IndexPropertySchema(
+ name: r'completedAt',
+ type: IndexType.value,
+ caseSensitive: false,
+ )
+ ],
+ )
+ },
+ links: {},
+ embeddedSchemas: {r'HitPoint': HitPointSchema},
+ getId: _pointRecordGetId,
+ getLinks: _pointRecordGetLinks,
+ attach: _pointRecordAttach,
+ version: '3.1.0+1',
+);
+
+int _pointRecordEstimateSize(
+ PointRecord object,
+ List offsets,
+ Map> allOffsets,
+) {
+ var bytesCount = offsets.last;
+ bytesCount += 3 + object.hitPoints.length * 3;
+ {
+ final offsets = allOffsets[HitPoint]!;
+ for (var i = 0; i < object.hitPoints.length; i++) {
+ final value = object.hitPoints[i];
+ bytesCount += HitPointSchema.estimateSize(value, offsets, allOffsets);
+ }
+ }
+ {
+ final value = object.note;
+ if (value != null) {
+ bytesCount += 3 + value.length * 3;
+ }
+ }
+ bytesCount += 3 + object.scores.length * 8;
+ bytesCount += 3 + object.title.length * 3;
+ return bytesCount;
+}
+
+void _pointRecordSerialize(
+ PointRecord object,
+ IsarWriter writer,
+ List offsets,
+ Map> allOffsets,
+) {
+ writer.writeLong(offsets[0], object.arrowsPerEnd);
+ writer.writeDouble(offsets[1], object.averageScore);
+ writer.writeByte(offsets[2], object.bowType.index);
+ writer.writeDateTime(offsets[3], object.completedAt);
+ writer.writeDateTime(offsets[4], object.createdAt);
+ writer.writeLong(offsets[5], object.distanceMeters);
+ writer.writeLong(offsets[6], object.endCount);
+ writer.writeObjectList(
+ offsets[7],
+ allOffsets,
+ HitPointSchema.serialize,
+ object.hitPoints,
+ );
+ writer.writeBool(offsets[8], object.isDraft);
+ writer.writeString(offsets[9], object.note);
+ writer.writeLongList(offsets[10], object.scores);
+ writer.writeByte(offsets[11], object.status.index);
+ writer.writeByte(offsets[12], object.targetFaceType.index);
+ writer.writeString(offsets[13], object.title);
+ writer.writeLong(offsets[14], object.totalArrows);
+ writer.writeLong(offsets[15], object.totalScore);
+ writer.writeDateTime(offsets[16], object.updatedAt);
+}
+
+PointRecord _pointRecordDeserialize(
+ Id id,
+ IsarReader reader,
+ List offsets,
+ Map> allOffsets,
+) {
+ final object = PointRecord();
+ object.arrowsPerEnd = reader.readLong(offsets[0]);
+ object.bowType =
+ _PointRecordbowTypeValueEnumMap[reader.readByteOrNull(offsets[2])] ??
+ BowType.recurve;
+ object.completedAt = reader.readDateTimeOrNull(offsets[3]);
+ object.createdAt = reader.readDateTime(offsets[4]);
+ object.distanceMeters = reader.readLong(offsets[5]);
+ object.endCount = reader.readLong(offsets[6]);
+ object.hitPoints = reader.readObjectList(
+ offsets[7],
+ HitPointSchema.deserialize,
+ allOffsets,
+ HitPoint(),
+ ) ??
+ [];
+ object.id = id;
+ object.note = reader.readStringOrNull(offsets[9]);
+ object.scores = reader.readLongList(offsets[10]) ?? [];
+ object.status =
+ _PointRecordstatusValueEnumMap[reader.readByteOrNull(offsets[11])] ??
+ PointRecordStatus.draft;
+ object.targetFaceType = _PointRecordtargetFaceTypeValueEnumMap[
+ reader.readByteOrNull(offsets[12])] ??
+ TargetFaceType.cm40;
+ object.title = reader.readString(offsets[13]);
+ object.updatedAt = reader.readDateTime(offsets[16]);
+ return object;
+}
+
+P _pointRecordDeserializeProp(
+ IsarReader reader,
+ int propertyId,
+ int offset,
+ Map> allOffsets,
+) {
+ switch (propertyId) {
+ case 0:
+ return (reader.readLong(offset)) as P;
+ case 1:
+ return (reader.readDoubleOrNull(offset)) as P;
+ case 2:
+ return (_PointRecordbowTypeValueEnumMap[reader.readByteOrNull(offset)] ??
+ BowType.recurve) as P;
+ case 3:
+ return (reader.readDateTimeOrNull(offset)) as P;
+ case 4:
+ return (reader.readDateTime(offset)) as P;
+ case 5:
+ return (reader.readLong(offset)) as P;
+ case 6:
+ return (reader.readLong(offset)) as P;
+ case 7:
+ return (reader.readObjectList(
+ offset,
+ HitPointSchema.deserialize,
+ allOffsets,
+ HitPoint(),
+ ) ??
+ []) as P;
+ case 8:
+ return (reader.readBool(offset)) as P;
+ case 9:
+ return (reader.readStringOrNull(offset)) as P;
+ case 10:
+ return (reader.readLongList(offset) ?? []) as P;
+ case 11:
+ return (_PointRecordstatusValueEnumMap[reader.readByteOrNull(offset)] ??
+ PointRecordStatus.draft) as P;
+ case 12:
+ return (_PointRecordtargetFaceTypeValueEnumMap[
+ reader.readByteOrNull(offset)] ??
+ TargetFaceType.cm40) as P;
+ case 13:
+ return (reader.readString(offset)) as P;
+ case 14:
+ return (reader.readLong(offset)) as P;
+ case 15:
+ return (reader.readLong(offset)) as P;
+ case 16:
+ return (reader.readDateTime(offset)) as P;
+ default:
+ throw IsarError('Unknown property with id $propertyId');
+ }
+}
+
+const _PointRecordbowTypeEnumValueMap = {
+ 'recurve': 0,
+ 'compound': 1,
+ 'barebow': 2,
+ 'traditional': 3,
+ 'longbow': 4,
+ 'other': 5,
+};
+const _PointRecordbowTypeValueEnumMap = {
+ 0: BowType.recurve,
+ 1: BowType.compound,
+ 2: BowType.barebow,
+ 3: BowType.traditional,
+ 4: BowType.longbow,
+ 5: BowType.other,
+};
+const _PointRecordstatusEnumValueMap = {
+ 'draft': 0,
+ 'completed': 1,
+};
+const _PointRecordstatusValueEnumMap = {
+ 0: PointRecordStatus.draft,
+ 1: PointRecordStatus.completed,
+};
+const _PointRecordtargetFaceTypeEnumValueMap = {
+ 'cm40': 0,
+ 'cm60': 1,
+ 'cm80': 2,
+ 'cm122': 3,
+ 'vegas3Spot': 4,
+ 'vertical3Spot': 5,
+ 'custom': 6,
+};
+const _PointRecordtargetFaceTypeValueEnumMap = {
+ 0: TargetFaceType.cm40,
+ 1: TargetFaceType.cm60,
+ 2: TargetFaceType.cm80,
+ 3: TargetFaceType.cm122,
+ 4: TargetFaceType.vegas3Spot,
+ 5: TargetFaceType.vertical3Spot,
+ 6: TargetFaceType.custom,
+};
+
+Id _pointRecordGetId(PointRecord object) {
+ return object.id;
+}
+
+List> _pointRecordGetLinks(PointRecord object) {
+ return [];
+}
+
+void _pointRecordAttach(
+ IsarCollection col, Id id, PointRecord object) {
+ object.id = id;
+}
+
+extension PointRecordQueryWhereSort
+ on QueryBuilder {
+ QueryBuilder anyId() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(const IdWhereClause.any());
+ });
+ }
+
+ QueryBuilder anyUpdatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ const IndexWhereClause.any(indexName: r'updatedAt'),
+ );
+ });
+ }
+
+ QueryBuilder anyCreatedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ const IndexWhereClause.any(indexName: r'createdAt'),
+ );
+ });
+ }
+
+ QueryBuilder anyCompletedAt() {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ const IndexWhereClause.any(indexName: r'completedAt'),
+ );
+ });
+ }
+}
+
+extension PointRecordQueryWhere
+ on QueryBuilder {
+ QueryBuilder idEqualTo(Id id) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IdWhereClause.between(
+ lower: id,
+ upper: id,
+ ));
+ });
+ }
+
+ QueryBuilder idNotEqualTo(
+ Id id) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: false),
+ )
+ .addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: false),
+ );
+ } else {
+ return query
+ .addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: false),
+ )
+ .addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: false),
+ );
+ }
+ });
+ }
+
+ QueryBuilder idGreaterThan(Id id,
+ {bool include = false}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ IdWhereClause.greaterThan(lower: id, includeLower: include),
+ );
+ });
+ }
+
+ QueryBuilder idLessThan(Id id,
+ {bool include = false}) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(
+ IdWhereClause.lessThan(upper: id, includeUpper: include),
+ );
+ });
+ }
+
+ QueryBuilder 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,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtEqualTo(
+ DateTime updatedAt) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.equalTo(
+ indexName: r'updatedAt',
+ value: [updatedAt],
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtNotEqualTo(
+ DateTime updatedAt) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: false,
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: false,
+ upper: [],
+ ));
+ } else {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: false,
+ upper: [],
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: false,
+ ));
+ }
+ });
+ }
+
+ QueryBuilder
+ updatedAtGreaterThan(
+ DateTime updatedAt, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [updatedAt],
+ includeLower: include,
+ upper: [],
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtLessThan(
+ DateTime updatedAt, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [],
+ upper: [updatedAt],
+ includeUpper: include,
+ ));
+ });
+ }
+
+ QueryBuilder updatedAtBetween(
+ DateTime lowerUpdatedAt,
+ DateTime upperUpdatedAt, {
+ bool includeLower = true,
+ bool includeUpper = true,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'updatedAt',
+ lower: [lowerUpdatedAt],
+ includeLower: includeLower,
+ upper: [upperUpdatedAt],
+ includeUpper: includeUpper,
+ ));
+ });
+ }
+
+ QueryBuilder createdAtEqualTo(
+ DateTime createdAt) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.equalTo(
+ indexName: r'createdAt',
+ value: [createdAt],
+ ));
+ });
+ }
+
+ QueryBuilder createdAtNotEqualTo(
+ DateTime createdAt) {
+ return QueryBuilder.apply(this, (query) {
+ if (query.whereSort == Sort.asc) {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'createdAt',
+ lower: [],
+ upper: [createdAt],
+ includeUpper: false,
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'createdAt',
+ lower: [createdAt],
+ includeLower: false,
+ upper: [],
+ ));
+ } else {
+ return query
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'createdAt',
+ lower: [createdAt],
+ includeLower: false,
+ upper: [],
+ ))
+ .addWhereClause(IndexWhereClause.between(
+ indexName: r'createdAt',
+ lower: [],
+ upper: [createdAt],
+ includeUpper: false,
+ ));
+ }
+ });
+ }
+
+ QueryBuilder
+ createdAtGreaterThan(
+ DateTime createdAt, {
+ bool include = false,
+ }) {
+ return QueryBuilder.apply(this, (query) {
+ return query.addWhereClause(IndexWhereClause.between(
+ indexName: r'createdAt',
+ lower: [createdAt],
+ includeLower: include,
+ upper: [],
+ ));
+ });
+ }
+
+ QueryBuilder