added sound during countdown, and upgraded minsdkversion
This commit is contained in:
parent
60bc571987
commit
23663f484b
BIN
assets/audio/count_finish.mp3
Normal file
BIN
assets/audio/count_finish.mp3
Normal file
Binary file not shown.
BIN
assets/audio/count_tone.wav
Normal file
BIN
assets/audio/count_tone.wav
Normal file
Binary file not shown.
@ -15,7 +15,7 @@ class ActionsDao extends DatabaseAccessor<AppDatabase> with _$ActionsDaoMixin {
|
|||||||
return await (select(actions)..where((action) => action.id.equals(id) )).getSingle();
|
return await (select(actions)..where((action) => action.id.equals(id) )).getSingle();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<Action>> fromActivity(Activity activity) async {
|
Future<List<Action>> fromActivity(Activity activity, Session session) async {
|
||||||
final result = select(db.activityActions).join(
|
final result = select(db.activityActions).join(
|
||||||
[
|
[
|
||||||
innerJoin(
|
innerJoin(
|
||||||
@ -24,7 +24,8 @@ class ActionsDao extends DatabaseAccessor<AppDatabase> with _$ActionsDaoMixin {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
..where(db.activityActions.activityId.equals(activity.id));
|
..where(db.activityActions.activityId.equals(activity.id))
|
||||||
|
..where(db.activityActions.sessionId.equals(session.id));
|
||||||
|
|
||||||
final actions = (await result.get())
|
final actions = (await result.get())
|
||||||
.map((e) => e.readTable(db.actions))
|
.map((e) => e.readTable(db.actions))
|
||||||
@ -33,5 +34,31 @@ class ActionsDao extends DatabaseAccessor<AppDatabase> with _$ActionsDaoMixin {
|
|||||||
return actions;
|
return actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Stream<List<Action>> watchActivityActions(Activity activity, Session session) {
|
||||||
|
final result = select(db.activityActions).join(
|
||||||
|
[
|
||||||
|
innerJoin(
|
||||||
|
db.actions,
|
||||||
|
db.actions.id.equalsExp(db.activityActions.actionId),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
..where(db.activityActions.activityId.equals(activity.id))
|
||||||
|
..where(db.activityActions.sessionId.equals(session.id));
|
||||||
|
|
||||||
|
// final actions = result.watch().map((rows) {
|
||||||
|
// return rows.map((row) {
|
||||||
|
// row.readTable(db.actions);
|
||||||
|
// }).toList();
|
||||||
|
// });
|
||||||
|
|
||||||
|
final actions = (result.watch()).map((rows) {
|
||||||
|
return rows.map((row) => row.readTable(db.actions)).toList();
|
||||||
|
});
|
||||||
|
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
|
||||||
Future createOrUpdate(ActionsCompanion action) => into(actions).insertOnConflictUpdate(action);
|
Future createOrUpdate(ActionsCompanion action) => into(actions).insertOnConflictUpdate(action);
|
||||||
|
Future replace(Action action) => update(actions).replace(action);
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ class ActivityActionsDao extends DatabaseAccessor<AppDatabase> with _$ActivityAc
|
|||||||
Future insert(ActivityAction activityAction) => into(activityActions).insert(activityAction);
|
Future insert(ActivityAction activityAction) => into(activityActions).insert(activityAction);
|
||||||
Future replace(ActivityAction activityAction) => update(activityActions).replace(activityAction);
|
Future replace(ActivityAction activityAction) => update(activityActions).replace(activityAction);
|
||||||
Future remove(ActivityAction activityAction) => delete(activityActions).delete(activityAction);
|
Future remove(ActivityAction activityAction) => delete(activityActions).delete(activityAction);
|
||||||
|
Future createOrUpdate(ActivityActionsCompanion activityAction) => into(activityActions).insertOnConflictUpdate(activityAction);
|
||||||
|
|
||||||
// Future<List<ActivityAction>> all() async {
|
// Future<List<ActivityAction>> all() async {
|
||||||
// return await select(activityActions).get();
|
// return await select(activityActions).get();
|
||||||
|
@ -6,5 +6,6 @@ part of 'activity_actions_dao.dart';
|
|||||||
mixin _$ActivityActionsDaoMixin on DatabaseAccessor<AppDatabase> {
|
mixin _$ActivityActionsDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
$ActivitiesTable get activities => attachedDatabase.activities;
|
$ActivitiesTable get activities => attachedDatabase.activities;
|
||||||
$ActionsTable get actions => attachedDatabase.actions;
|
$ActionsTable get actions => attachedDatabase.actions;
|
||||||
|
$SessionsTable get sessions => attachedDatabase.sessions;
|
||||||
$ActivityActionsTable get activityActions => attachedDatabase.activityActions;
|
$ActivityActionsTable get activityActions => attachedDatabase.activityActions;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
AppDatabase() : super(_openConnection());
|
AppDatabase() : super(_openConnection());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 33;
|
int get schemaVersion => 35;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
MigrationStrategy get migration {
|
MigrationStrategy get migration {
|
||||||
@ -155,10 +155,10 @@ class Activities extends Table {
|
|||||||
|
|
||||||
class ActivityActions extends Table {
|
class ActivityActions extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
IntColumn get activityId =>
|
IntColumn get activityId => integer().references(Activities, #id, onDelete: KeyAction.cascade)();
|
||||||
integer().references(Activities, #id, onDelete: KeyAction.cascade)();
|
|
||||||
IntColumn get actionId =>
|
IntColumn get actionId =>
|
||||||
integer().references(Actions, #id, onDelete: KeyAction.cascade)();
|
integer().references(Actions, #id, onDelete: KeyAction.cascade)();
|
||||||
|
IntColumn get sessionId => integer().references(Sessions, #id, onDelete: KeyAction.cascade)();
|
||||||
IntColumn get position => integer()();
|
IntColumn get position => integer()();
|
||||||
DateTimeColumn get createdAt =>
|
DateTimeColumn get createdAt =>
|
||||||
dateTime().withDefault(Variable(DateTime.now()))();
|
dateTime().withDefault(Variable(DateTime.now()))();
|
||||||
|
@ -2365,6 +2365,15 @@ class $ActivityActionsTable extends ActivityActions
|
|||||||
requiredDuringInsert: true,
|
requiredDuringInsert: true,
|
||||||
defaultConstraints: GeneratedColumn.constraintIsAlways(
|
defaultConstraints: GeneratedColumn.constraintIsAlways(
|
||||||
'REFERENCES actions (id) ON DELETE CASCADE'));
|
'REFERENCES actions (id) ON DELETE CASCADE'));
|
||||||
|
static const VerificationMeta _sessionIdMeta =
|
||||||
|
const VerificationMeta('sessionId');
|
||||||
|
@override
|
||||||
|
late final GeneratedColumn<int> sessionId = GeneratedColumn<int>(
|
||||||
|
'session_id', aliasedName, false,
|
||||||
|
type: DriftSqlType.int,
|
||||||
|
requiredDuringInsert: true,
|
||||||
|
defaultConstraints: GeneratedColumn.constraintIsAlways(
|
||||||
|
'REFERENCES sessions (id) ON DELETE CASCADE'));
|
||||||
static const VerificationMeta _positionMeta =
|
static const VerificationMeta _positionMeta =
|
||||||
const VerificationMeta('position');
|
const VerificationMeta('position');
|
||||||
@override
|
@override
|
||||||
@ -2381,7 +2390,7 @@ class $ActivityActionsTable extends ActivityActions
|
|||||||
defaultValue: Variable(DateTime.now()));
|
defaultValue: Variable(DateTime.now()));
|
||||||
@override
|
@override
|
||||||
List<GeneratedColumn> get $columns =>
|
List<GeneratedColumn> get $columns =>
|
||||||
[id, activityId, actionId, position, createdAt];
|
[id, activityId, actionId, sessionId, position, createdAt];
|
||||||
@override
|
@override
|
||||||
String get aliasedName => _alias ?? actualTableName;
|
String get aliasedName => _alias ?? actualTableName;
|
||||||
@override
|
@override
|
||||||
@ -2409,6 +2418,12 @@ class $ActivityActionsTable extends ActivityActions
|
|||||||
} else if (isInserting) {
|
} else if (isInserting) {
|
||||||
context.missing(_actionIdMeta);
|
context.missing(_actionIdMeta);
|
||||||
}
|
}
|
||||||
|
if (data.containsKey('session_id')) {
|
||||||
|
context.handle(_sessionIdMeta,
|
||||||
|
sessionId.isAcceptableOrUnknown(data['session_id']!, _sessionIdMeta));
|
||||||
|
} else if (isInserting) {
|
||||||
|
context.missing(_sessionIdMeta);
|
||||||
|
}
|
||||||
if (data.containsKey('position')) {
|
if (data.containsKey('position')) {
|
||||||
context.handle(_positionMeta,
|
context.handle(_positionMeta,
|
||||||
position.isAcceptableOrUnknown(data['position']!, _positionMeta));
|
position.isAcceptableOrUnknown(data['position']!, _positionMeta));
|
||||||
@ -2434,6 +2449,8 @@ class $ActivityActionsTable extends ActivityActions
|
|||||||
.read(DriftSqlType.int, data['${effectivePrefix}activity_id'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}activity_id'])!,
|
||||||
actionId: attachedDatabase.typeMapping
|
actionId: attachedDatabase.typeMapping
|
||||||
.read(DriftSqlType.int, data['${effectivePrefix}action_id'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}action_id'])!,
|
||||||
|
sessionId: attachedDatabase.typeMapping
|
||||||
|
.read(DriftSqlType.int, data['${effectivePrefix}session_id'])!,
|
||||||
position: attachedDatabase.typeMapping
|
position: attachedDatabase.typeMapping
|
||||||
.read(DriftSqlType.int, data['${effectivePrefix}position'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}position'])!,
|
||||||
createdAt: attachedDatabase.typeMapping
|
createdAt: attachedDatabase.typeMapping
|
||||||
@ -2451,12 +2468,14 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
final int id;
|
final int id;
|
||||||
final int activityId;
|
final int activityId;
|
||||||
final int actionId;
|
final int actionId;
|
||||||
|
final int sessionId;
|
||||||
final int position;
|
final int position;
|
||||||
final DateTime createdAt;
|
final DateTime createdAt;
|
||||||
const ActivityAction(
|
const ActivityAction(
|
||||||
{required this.id,
|
{required this.id,
|
||||||
required this.activityId,
|
required this.activityId,
|
||||||
required this.actionId,
|
required this.actionId,
|
||||||
|
required this.sessionId,
|
||||||
required this.position,
|
required this.position,
|
||||||
required this.createdAt});
|
required this.createdAt});
|
||||||
@override
|
@override
|
||||||
@ -2465,6 +2484,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
map['id'] = Variable<int>(id);
|
map['id'] = Variable<int>(id);
|
||||||
map['activity_id'] = Variable<int>(activityId);
|
map['activity_id'] = Variable<int>(activityId);
|
||||||
map['action_id'] = Variable<int>(actionId);
|
map['action_id'] = Variable<int>(actionId);
|
||||||
|
map['session_id'] = Variable<int>(sessionId);
|
||||||
map['position'] = Variable<int>(position);
|
map['position'] = Variable<int>(position);
|
||||||
map['created_at'] = Variable<DateTime>(createdAt);
|
map['created_at'] = Variable<DateTime>(createdAt);
|
||||||
return map;
|
return map;
|
||||||
@ -2475,6 +2495,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
id: Value(id),
|
id: Value(id),
|
||||||
activityId: Value(activityId),
|
activityId: Value(activityId),
|
||||||
actionId: Value(actionId),
|
actionId: Value(actionId),
|
||||||
|
sessionId: Value(sessionId),
|
||||||
position: Value(position),
|
position: Value(position),
|
||||||
createdAt: Value(createdAt),
|
createdAt: Value(createdAt),
|
||||||
);
|
);
|
||||||
@ -2487,6 +2508,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
id: serializer.fromJson<int>(json['id']),
|
id: serializer.fromJson<int>(json['id']),
|
||||||
activityId: serializer.fromJson<int>(json['activityId']),
|
activityId: serializer.fromJson<int>(json['activityId']),
|
||||||
actionId: serializer.fromJson<int>(json['actionId']),
|
actionId: serializer.fromJson<int>(json['actionId']),
|
||||||
|
sessionId: serializer.fromJson<int>(json['sessionId']),
|
||||||
position: serializer.fromJson<int>(json['position']),
|
position: serializer.fromJson<int>(json['position']),
|
||||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||||
);
|
);
|
||||||
@ -2498,6 +2520,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
'id': serializer.toJson<int>(id),
|
'id': serializer.toJson<int>(id),
|
||||||
'activityId': serializer.toJson<int>(activityId),
|
'activityId': serializer.toJson<int>(activityId),
|
||||||
'actionId': serializer.toJson<int>(actionId),
|
'actionId': serializer.toJson<int>(actionId),
|
||||||
|
'sessionId': serializer.toJson<int>(sessionId),
|
||||||
'position': serializer.toJson<int>(position),
|
'position': serializer.toJson<int>(position),
|
||||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||||
};
|
};
|
||||||
@ -2507,12 +2530,14 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
{int? id,
|
{int? id,
|
||||||
int? activityId,
|
int? activityId,
|
||||||
int? actionId,
|
int? actionId,
|
||||||
|
int? sessionId,
|
||||||
int? position,
|
int? position,
|
||||||
DateTime? createdAt}) =>
|
DateTime? createdAt}) =>
|
||||||
ActivityAction(
|
ActivityAction(
|
||||||
id: id ?? this.id,
|
id: id ?? this.id,
|
||||||
activityId: activityId ?? this.activityId,
|
activityId: activityId ?? this.activityId,
|
||||||
actionId: actionId ?? this.actionId,
|
actionId: actionId ?? this.actionId,
|
||||||
|
sessionId: sessionId ?? this.sessionId,
|
||||||
position: position ?? this.position,
|
position: position ?? this.position,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2522,6 +2547,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
activityId:
|
activityId:
|
||||||
data.activityId.present ? data.activityId.value : this.activityId,
|
data.activityId.present ? data.activityId.value : this.activityId,
|
||||||
actionId: data.actionId.present ? data.actionId.value : this.actionId,
|
actionId: data.actionId.present ? data.actionId.value : this.actionId,
|
||||||
|
sessionId: data.sessionId.present ? data.sessionId.value : this.sessionId,
|
||||||
position: data.position.present ? data.position.value : this.position,
|
position: data.position.present ? data.position.value : this.position,
|
||||||
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2533,6 +2559,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
..write('id: $id, ')
|
..write('id: $id, ')
|
||||||
..write('activityId: $activityId, ')
|
..write('activityId: $activityId, ')
|
||||||
..write('actionId: $actionId, ')
|
..write('actionId: $actionId, ')
|
||||||
|
..write('sessionId: $sessionId, ')
|
||||||
..write('position: $position, ')
|
..write('position: $position, ')
|
||||||
..write('createdAt: $createdAt')
|
..write('createdAt: $createdAt')
|
||||||
..write(')'))
|
..write(')'))
|
||||||
@ -2541,7 +2568,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode =>
|
int get hashCode =>
|
||||||
Object.hash(id, activityId, actionId, position, createdAt);
|
Object.hash(id, activityId, actionId, sessionId, position, createdAt);
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) =>
|
bool operator ==(Object other) =>
|
||||||
identical(this, other) ||
|
identical(this, other) ||
|
||||||
@ -2549,6 +2576,7 @@ class ActivityAction extends DataClass implements Insertable<ActivityAction> {
|
|||||||
other.id == this.id &&
|
other.id == this.id &&
|
||||||
other.activityId == this.activityId &&
|
other.activityId == this.activityId &&
|
||||||
other.actionId == this.actionId &&
|
other.actionId == this.actionId &&
|
||||||
|
other.sessionId == this.sessionId &&
|
||||||
other.position == this.position &&
|
other.position == this.position &&
|
||||||
other.createdAt == this.createdAt);
|
other.createdAt == this.createdAt);
|
||||||
}
|
}
|
||||||
@ -2557,12 +2585,14 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
final Value<int> id;
|
final Value<int> id;
|
||||||
final Value<int> activityId;
|
final Value<int> activityId;
|
||||||
final Value<int> actionId;
|
final Value<int> actionId;
|
||||||
|
final Value<int> sessionId;
|
||||||
final Value<int> position;
|
final Value<int> position;
|
||||||
final Value<DateTime> createdAt;
|
final Value<DateTime> createdAt;
|
||||||
const ActivityActionsCompanion({
|
const ActivityActionsCompanion({
|
||||||
this.id = const Value.absent(),
|
this.id = const Value.absent(),
|
||||||
this.activityId = const Value.absent(),
|
this.activityId = const Value.absent(),
|
||||||
this.actionId = const Value.absent(),
|
this.actionId = const Value.absent(),
|
||||||
|
this.sessionId = const Value.absent(),
|
||||||
this.position = const Value.absent(),
|
this.position = const Value.absent(),
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
});
|
});
|
||||||
@ -2570,15 +2600,18 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
this.id = const Value.absent(),
|
this.id = const Value.absent(),
|
||||||
required int activityId,
|
required int activityId,
|
||||||
required int actionId,
|
required int actionId,
|
||||||
|
required int sessionId,
|
||||||
required int position,
|
required int position,
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
}) : activityId = Value(activityId),
|
}) : activityId = Value(activityId),
|
||||||
actionId = Value(actionId),
|
actionId = Value(actionId),
|
||||||
|
sessionId = Value(sessionId),
|
||||||
position = Value(position);
|
position = Value(position);
|
||||||
static Insertable<ActivityAction> custom({
|
static Insertable<ActivityAction> custom({
|
||||||
Expression<int>? id,
|
Expression<int>? id,
|
||||||
Expression<int>? activityId,
|
Expression<int>? activityId,
|
||||||
Expression<int>? actionId,
|
Expression<int>? actionId,
|
||||||
|
Expression<int>? sessionId,
|
||||||
Expression<int>? position,
|
Expression<int>? position,
|
||||||
Expression<DateTime>? createdAt,
|
Expression<DateTime>? createdAt,
|
||||||
}) {
|
}) {
|
||||||
@ -2586,6 +2619,7 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
if (id != null) 'id': id,
|
if (id != null) 'id': id,
|
||||||
if (activityId != null) 'activity_id': activityId,
|
if (activityId != null) 'activity_id': activityId,
|
||||||
if (actionId != null) 'action_id': actionId,
|
if (actionId != null) 'action_id': actionId,
|
||||||
|
if (sessionId != null) 'session_id': sessionId,
|
||||||
if (position != null) 'position': position,
|
if (position != null) 'position': position,
|
||||||
if (createdAt != null) 'created_at': createdAt,
|
if (createdAt != null) 'created_at': createdAt,
|
||||||
});
|
});
|
||||||
@ -2595,12 +2629,14 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
{Value<int>? id,
|
{Value<int>? id,
|
||||||
Value<int>? activityId,
|
Value<int>? activityId,
|
||||||
Value<int>? actionId,
|
Value<int>? actionId,
|
||||||
|
Value<int>? sessionId,
|
||||||
Value<int>? position,
|
Value<int>? position,
|
||||||
Value<DateTime>? createdAt}) {
|
Value<DateTime>? createdAt}) {
|
||||||
return ActivityActionsCompanion(
|
return ActivityActionsCompanion(
|
||||||
id: id ?? this.id,
|
id: id ?? this.id,
|
||||||
activityId: activityId ?? this.activityId,
|
activityId: activityId ?? this.activityId,
|
||||||
actionId: actionId ?? this.actionId,
|
actionId: actionId ?? this.actionId,
|
||||||
|
sessionId: sessionId ?? this.sessionId,
|
||||||
position: position ?? this.position,
|
position: position ?? this.position,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2618,6 +2654,9 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
if (actionId.present) {
|
if (actionId.present) {
|
||||||
map['action_id'] = Variable<int>(actionId.value);
|
map['action_id'] = Variable<int>(actionId.value);
|
||||||
}
|
}
|
||||||
|
if (sessionId.present) {
|
||||||
|
map['session_id'] = Variable<int>(sessionId.value);
|
||||||
|
}
|
||||||
if (position.present) {
|
if (position.present) {
|
||||||
map['position'] = Variable<int>(position.value);
|
map['position'] = Variable<int>(position.value);
|
||||||
}
|
}
|
||||||
@ -2633,6 +2672,7 @@ class ActivityActionsCompanion extends UpdateCompanion<ActivityAction> {
|
|||||||
..write('id: $id, ')
|
..write('id: $id, ')
|
||||||
..write('activityId: $activityId, ')
|
..write('activityId: $activityId, ')
|
||||||
..write('actionId: $actionId, ')
|
..write('actionId: $actionId, ')
|
||||||
|
..write('sessionId: $sessionId, ')
|
||||||
..write('position: $position, ')
|
..write('position: $position, ')
|
||||||
..write('createdAt: $createdAt')
|
..write('createdAt: $createdAt')
|
||||||
..write(')'))
|
..write(')'))
|
||||||
@ -3359,6 +3399,13 @@ abstract class _$AppDatabase extends GeneratedDatabase {
|
|||||||
TableUpdate('activity_actions', kind: UpdateKind.delete),
|
TableUpdate('activity_actions', kind: UpdateKind.delete),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
WritePropagation(
|
||||||
|
on: TableUpdateQuery.onTableName('sessions',
|
||||||
|
limitUpdateKind: UpdateKind.delete),
|
||||||
|
result: [
|
||||||
|
TableUpdate('activity_actions', kind: UpdateKind.delete),
|
||||||
|
],
|
||||||
|
),
|
||||||
WritePropagation(
|
WritePropagation(
|
||||||
on: TableUpdateQuery.onTableName('media_items',
|
on: TableUpdateQuery.onTableName('media_items',
|
||||||
limitUpdateKind: UpdateKind.delete),
|
limitUpdateKind: UpdateKind.delete),
|
||||||
@ -3411,6 +3458,23 @@ final class $$SessionsTableReferences
|
|||||||
return ProcessedTableManager(
|
return ProcessedTableManager(
|
||||||
manager.$state.copyWith(prefetchedData: cache));
|
manager.$state.copyWith(prefetchedData: cache));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MultiTypedResultKey<$ActivityActionsTable, List<ActivityAction>>
|
||||||
|
_activityActionsRefsTable(_$AppDatabase db) =>
|
||||||
|
MultiTypedResultKey.fromTable(db.activityActions,
|
||||||
|
aliasName: $_aliasNameGenerator(
|
||||||
|
db.sessions.id, db.activityActions.sessionId));
|
||||||
|
|
||||||
|
$$ActivityActionsTableProcessedTableManager get activityActionsRefs {
|
||||||
|
final manager =
|
||||||
|
$$ActivityActionsTableTableManager($_db, $_db.activityActions)
|
||||||
|
.filter((f) => f.sessionId.id($_item.id));
|
||||||
|
|
||||||
|
final cache =
|
||||||
|
$_typedResult.readTableOrNull(_activityActionsRefsTable($_db));
|
||||||
|
return ProcessedTableManager(
|
||||||
|
manager.$state.copyWith(prefetchedData: cache));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$SessionsTableFilterComposer
|
class $$SessionsTableFilterComposer
|
||||||
@ -3468,6 +3532,27 @@ class $$SessionsTableFilterComposer
|
|||||||
));
|
));
|
||||||
return f(composer);
|
return f(composer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Expression<bool> activityActionsRefs(
|
||||||
|
Expression<bool> Function($$ActivityActionsTableFilterComposer f) f) {
|
||||||
|
final $$ActivityActionsTableFilterComposer composer = $composerBuilder(
|
||||||
|
composer: this,
|
||||||
|
getCurrentColumn: (t) => t.id,
|
||||||
|
referencedTable: $db.activityActions,
|
||||||
|
getReferencedColumn: (t) => t.sessionId,
|
||||||
|
builder: (joinBuilder,
|
||||||
|
{$addJoinBuilderToRootComposer,
|
||||||
|
$removeJoinBuilderFromRootComposer}) =>
|
||||||
|
$$ActivityActionsTableFilterComposer(
|
||||||
|
$db: $db,
|
||||||
|
$table: $db.activityActions,
|
||||||
|
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
||||||
|
joinBuilder: joinBuilder,
|
||||||
|
$removeJoinBuilderFromRootComposer:
|
||||||
|
$removeJoinBuilderFromRootComposer,
|
||||||
|
));
|
||||||
|
return f(composer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$SessionsTableOrderingComposer
|
class $$SessionsTableOrderingComposer
|
||||||
@ -3559,6 +3644,27 @@ class $$SessionsTableAnnotationComposer
|
|||||||
));
|
));
|
||||||
return f(composer);
|
return f(composer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Expression<T> activityActionsRefs<T extends Object>(
|
||||||
|
Expression<T> Function($$ActivityActionsTableAnnotationComposer a) f) {
|
||||||
|
final $$ActivityActionsTableAnnotationComposer composer = $composerBuilder(
|
||||||
|
composer: this,
|
||||||
|
getCurrentColumn: (t) => t.id,
|
||||||
|
referencedTable: $db.activityActions,
|
||||||
|
getReferencedColumn: (t) => t.sessionId,
|
||||||
|
builder: (joinBuilder,
|
||||||
|
{$addJoinBuilderToRootComposer,
|
||||||
|
$removeJoinBuilderFromRootComposer}) =>
|
||||||
|
$$ActivityActionsTableAnnotationComposer(
|
||||||
|
$db: $db,
|
||||||
|
$table: $db.activityActions,
|
||||||
|
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
||||||
|
joinBuilder: joinBuilder,
|
||||||
|
$removeJoinBuilderFromRootComposer:
|
||||||
|
$removeJoinBuilderFromRootComposer,
|
||||||
|
));
|
||||||
|
return f(composer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$SessionsTableTableManager extends RootTableManager<
|
class $$SessionsTableTableManager extends RootTableManager<
|
||||||
@ -3572,7 +3678,8 @@ class $$SessionsTableTableManager extends RootTableManager<
|
|||||||
$$SessionsTableUpdateCompanionBuilder,
|
$$SessionsTableUpdateCompanionBuilder,
|
||||||
(Session, $$SessionsTableReferences),
|
(Session, $$SessionsTableReferences),
|
||||||
Session,
|
Session,
|
||||||
PrefetchHooks Function({bool sessionActivitiesRefs})> {
|
PrefetchHooks Function(
|
||||||
|
{bool sessionActivitiesRefs, bool activityActionsRefs})> {
|
||||||
$$SessionsTableTableManager(_$AppDatabase db, $SessionsTable table)
|
$$SessionsTableTableManager(_$AppDatabase db, $SessionsTable table)
|
||||||
: super(TableManagerState(
|
: super(TableManagerState(
|
||||||
db: db,
|
db: db,
|
||||||
@ -3627,11 +3734,13 @@ class $$SessionsTableTableManager extends RootTableManager<
|
|||||||
.map((e) =>
|
.map((e) =>
|
||||||
(e.readTable(table), $$SessionsTableReferences(db, table, e)))
|
(e.readTable(table), $$SessionsTableReferences(db, table, e)))
|
||||||
.toList(),
|
.toList(),
|
||||||
prefetchHooksCallback: ({sessionActivitiesRefs = false}) {
|
prefetchHooksCallback: (
|
||||||
|
{sessionActivitiesRefs = false, activityActionsRefs = false}) {
|
||||||
return PrefetchHooks(
|
return PrefetchHooks(
|
||||||
db: db,
|
db: db,
|
||||||
explicitlyWatchedTables: [
|
explicitlyWatchedTables: [
|
||||||
if (sessionActivitiesRefs) db.sessionActivities
|
if (sessionActivitiesRefs) db.sessionActivities,
|
||||||
|
if (activityActionsRefs) db.activityActions
|
||||||
],
|
],
|
||||||
addJoins: null,
|
addJoins: null,
|
||||||
getPrefetchedDataCallback: (items) async {
|
getPrefetchedDataCallback: (items) async {
|
||||||
@ -3647,6 +3756,18 @@ class $$SessionsTableTableManager extends RootTableManager<
|
|||||||
referencedItemsForCurrentItem:
|
referencedItemsForCurrentItem:
|
||||||
(item, referencedItems) => referencedItems
|
(item, referencedItems) => referencedItems
|
||||||
.where((e) => e.sessionId == item.id),
|
.where((e) => e.sessionId == item.id),
|
||||||
|
typedResults: items),
|
||||||
|
if (activityActionsRefs)
|
||||||
|
await $_getPrefetchedData(
|
||||||
|
currentTable: table,
|
||||||
|
referencedTable: $$SessionsTableReferences
|
||||||
|
._activityActionsRefsTable(db),
|
||||||
|
managerFromTypedResult: (p0) =>
|
||||||
|
$$SessionsTableReferences(db, table, p0)
|
||||||
|
.activityActionsRefs,
|
||||||
|
referencedItemsForCurrentItem:
|
||||||
|
(item, referencedItems) => referencedItems
|
||||||
|
.where((e) => e.sessionId == item.id),
|
||||||
typedResults: items)
|
typedResults: items)
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
@ -3666,7 +3787,8 @@ typedef $$SessionsTableProcessedTableManager = ProcessedTableManager<
|
|||||||
$$SessionsTableUpdateCompanionBuilder,
|
$$SessionsTableUpdateCompanionBuilder,
|
||||||
(Session, $$SessionsTableReferences),
|
(Session, $$SessionsTableReferences),
|
||||||
Session,
|
Session,
|
||||||
PrefetchHooks Function({bool sessionActivitiesRefs})>;
|
PrefetchHooks Function(
|
||||||
|
{bool sessionActivitiesRefs, bool activityActionsRefs})>;
|
||||||
typedef $$ActivitiesTableCreateCompanionBuilder = ActivitiesCompanion Function({
|
typedef $$ActivitiesTableCreateCompanionBuilder = ActivitiesCompanion Function({
|
||||||
Value<int> id,
|
Value<int> id,
|
||||||
required String title,
|
required String title,
|
||||||
@ -4953,6 +5075,7 @@ typedef $$ActivityActionsTableCreateCompanionBuilder = ActivityActionsCompanion
|
|||||||
Value<int> id,
|
Value<int> id,
|
||||||
required int activityId,
|
required int activityId,
|
||||||
required int actionId,
|
required int actionId,
|
||||||
|
required int sessionId,
|
||||||
required int position,
|
required int position,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
});
|
});
|
||||||
@ -4961,6 +5084,7 @@ typedef $$ActivityActionsTableUpdateCompanionBuilder = ActivityActionsCompanion
|
|||||||
Value<int> id,
|
Value<int> id,
|
||||||
Value<int> activityId,
|
Value<int> activityId,
|
||||||
Value<int> actionId,
|
Value<int> actionId,
|
||||||
|
Value<int> sessionId,
|
||||||
Value<int> position,
|
Value<int> position,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
});
|
});
|
||||||
@ -4995,6 +5119,19 @@ final class $$ActivityActionsTableReferences extends BaseReferences<
|
|||||||
return ProcessedTableManager(
|
return ProcessedTableManager(
|
||||||
manager.$state.copyWith(prefetchedData: [item]));
|
manager.$state.copyWith(prefetchedData: [item]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static $SessionsTable _sessionIdTable(_$AppDatabase db) =>
|
||||||
|
db.sessions.createAlias(
|
||||||
|
$_aliasNameGenerator(db.activityActions.sessionId, db.sessions.id));
|
||||||
|
|
||||||
|
$$SessionsTableProcessedTableManager get sessionId {
|
||||||
|
final manager = $$SessionsTableTableManager($_db, $_db.sessions)
|
||||||
|
.filter((f) => f.id($_item.sessionId!));
|
||||||
|
final item = $_typedResult.readTableOrNull(_sessionIdTable($_db));
|
||||||
|
if (item == null) return manager;
|
||||||
|
return ProcessedTableManager(
|
||||||
|
manager.$state.copyWith(prefetchedData: [item]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActivityActionsTableFilterComposer
|
class $$ActivityActionsTableFilterComposer
|
||||||
@ -5054,6 +5191,26 @@ class $$ActivityActionsTableFilterComposer
|
|||||||
));
|
));
|
||||||
return composer;
|
return composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$$SessionsTableFilterComposer get sessionId {
|
||||||
|
final $$SessionsTableFilterComposer composer = $composerBuilder(
|
||||||
|
composer: this,
|
||||||
|
getCurrentColumn: (t) => t.sessionId,
|
||||||
|
referencedTable: $db.sessions,
|
||||||
|
getReferencedColumn: (t) => t.id,
|
||||||
|
builder: (joinBuilder,
|
||||||
|
{$addJoinBuilderToRootComposer,
|
||||||
|
$removeJoinBuilderFromRootComposer}) =>
|
||||||
|
$$SessionsTableFilterComposer(
|
||||||
|
$db: $db,
|
||||||
|
$table: $db.sessions,
|
||||||
|
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
||||||
|
joinBuilder: joinBuilder,
|
||||||
|
$removeJoinBuilderFromRootComposer:
|
||||||
|
$removeJoinBuilderFromRootComposer,
|
||||||
|
));
|
||||||
|
return composer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActivityActionsTableOrderingComposer
|
class $$ActivityActionsTableOrderingComposer
|
||||||
@ -5113,6 +5270,26 @@ class $$ActivityActionsTableOrderingComposer
|
|||||||
));
|
));
|
||||||
return composer;
|
return composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$$SessionsTableOrderingComposer get sessionId {
|
||||||
|
final $$SessionsTableOrderingComposer composer = $composerBuilder(
|
||||||
|
composer: this,
|
||||||
|
getCurrentColumn: (t) => t.sessionId,
|
||||||
|
referencedTable: $db.sessions,
|
||||||
|
getReferencedColumn: (t) => t.id,
|
||||||
|
builder: (joinBuilder,
|
||||||
|
{$addJoinBuilderToRootComposer,
|
||||||
|
$removeJoinBuilderFromRootComposer}) =>
|
||||||
|
$$SessionsTableOrderingComposer(
|
||||||
|
$db: $db,
|
||||||
|
$table: $db.sessions,
|
||||||
|
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
||||||
|
joinBuilder: joinBuilder,
|
||||||
|
$removeJoinBuilderFromRootComposer:
|
||||||
|
$removeJoinBuilderFromRootComposer,
|
||||||
|
));
|
||||||
|
return composer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActivityActionsTableAnnotationComposer
|
class $$ActivityActionsTableAnnotationComposer
|
||||||
@ -5172,6 +5349,26 @@ class $$ActivityActionsTableAnnotationComposer
|
|||||||
));
|
));
|
||||||
return composer;
|
return composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$$SessionsTableAnnotationComposer get sessionId {
|
||||||
|
final $$SessionsTableAnnotationComposer composer = $composerBuilder(
|
||||||
|
composer: this,
|
||||||
|
getCurrentColumn: (t) => t.sessionId,
|
||||||
|
referencedTable: $db.sessions,
|
||||||
|
getReferencedColumn: (t) => t.id,
|
||||||
|
builder: (joinBuilder,
|
||||||
|
{$addJoinBuilderToRootComposer,
|
||||||
|
$removeJoinBuilderFromRootComposer}) =>
|
||||||
|
$$SessionsTableAnnotationComposer(
|
||||||
|
$db: $db,
|
||||||
|
$table: $db.sessions,
|
||||||
|
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
||||||
|
joinBuilder: joinBuilder,
|
||||||
|
$removeJoinBuilderFromRootComposer:
|
||||||
|
$removeJoinBuilderFromRootComposer,
|
||||||
|
));
|
||||||
|
return composer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActivityActionsTableTableManager extends RootTableManager<
|
class $$ActivityActionsTableTableManager extends RootTableManager<
|
||||||
@ -5185,7 +5382,7 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
$$ActivityActionsTableUpdateCompanionBuilder,
|
$$ActivityActionsTableUpdateCompanionBuilder,
|
||||||
(ActivityAction, $$ActivityActionsTableReferences),
|
(ActivityAction, $$ActivityActionsTableReferences),
|
||||||
ActivityAction,
|
ActivityAction,
|
||||||
PrefetchHooks Function({bool activityId, bool actionId})> {
|
PrefetchHooks Function({bool activityId, bool actionId, bool sessionId})> {
|
||||||
$$ActivityActionsTableTableManager(
|
$$ActivityActionsTableTableManager(
|
||||||
_$AppDatabase db, $ActivityActionsTable table)
|
_$AppDatabase db, $ActivityActionsTable table)
|
||||||
: super(TableManagerState(
|
: super(TableManagerState(
|
||||||
@ -5201,6 +5398,7 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
Value<int> id = const Value.absent(),
|
Value<int> id = const Value.absent(),
|
||||||
Value<int> activityId = const Value.absent(),
|
Value<int> activityId = const Value.absent(),
|
||||||
Value<int> actionId = const Value.absent(),
|
Value<int> actionId = const Value.absent(),
|
||||||
|
Value<int> sessionId = const Value.absent(),
|
||||||
Value<int> position = const Value.absent(),
|
Value<int> position = const Value.absent(),
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
}) =>
|
}) =>
|
||||||
@ -5208,6 +5406,7 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
id: id,
|
id: id,
|
||||||
activityId: activityId,
|
activityId: activityId,
|
||||||
actionId: actionId,
|
actionId: actionId,
|
||||||
|
sessionId: sessionId,
|
||||||
position: position,
|
position: position,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
),
|
),
|
||||||
@ -5215,6 +5414,7 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
Value<int> id = const Value.absent(),
|
Value<int> id = const Value.absent(),
|
||||||
required int activityId,
|
required int activityId,
|
||||||
required int actionId,
|
required int actionId,
|
||||||
|
required int sessionId,
|
||||||
required int position,
|
required int position,
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
}) =>
|
}) =>
|
||||||
@ -5222,6 +5422,7 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
id: id,
|
id: id,
|
||||||
activityId: activityId,
|
activityId: activityId,
|
||||||
actionId: actionId,
|
actionId: actionId,
|
||||||
|
sessionId: sessionId,
|
||||||
position: position,
|
position: position,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
),
|
),
|
||||||
@ -5231,7 +5432,8 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
$$ActivityActionsTableReferences(db, table, e)
|
$$ActivityActionsTableReferences(db, table, e)
|
||||||
))
|
))
|
||||||
.toList(),
|
.toList(),
|
||||||
prefetchHooksCallback: ({activityId = false, actionId = false}) {
|
prefetchHooksCallback: (
|
||||||
|
{activityId = false, actionId = false, sessionId = false}) {
|
||||||
return PrefetchHooks(
|
return PrefetchHooks(
|
||||||
db: db,
|
db: db,
|
||||||
explicitlyWatchedTables: [],
|
explicitlyWatchedTables: [],
|
||||||
@ -5269,6 +5471,16 @@ class $$ActivityActionsTableTableManager extends RootTableManager<
|
|||||||
$$ActivityActionsTableReferences._actionIdTable(db).id,
|
$$ActivityActionsTableReferences._actionIdTable(db).id,
|
||||||
) as T;
|
) as T;
|
||||||
}
|
}
|
||||||
|
if (sessionId) {
|
||||||
|
state = state.withJoin(
|
||||||
|
currentTable: table,
|
||||||
|
currentColumn: table.sessionId,
|
||||||
|
referencedTable:
|
||||||
|
$$ActivityActionsTableReferences._sessionIdTable(db),
|
||||||
|
referencedColumn:
|
||||||
|
$$ActivityActionsTableReferences._sessionIdTable(db).id,
|
||||||
|
) as T;
|
||||||
|
}
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
},
|
},
|
||||||
@ -5291,7 +5503,7 @@ typedef $$ActivityActionsTableProcessedTableManager = ProcessedTableManager<
|
|||||||
$$ActivityActionsTableUpdateCompanionBuilder,
|
$$ActivityActionsTableUpdateCompanionBuilder,
|
||||||
(ActivityAction, $$ActivityActionsTableReferences),
|
(ActivityAction, $$ActivityActionsTableReferences),
|
||||||
ActivityAction,
|
ActivityAction,
|
||||||
PrefetchHooks Function({bool activityId, bool actionId})>;
|
PrefetchHooks Function({bool activityId, bool actionId, bool sessionId})>;
|
||||||
typedef $$MediaItemsTableCreateCompanionBuilder = MediaItemsCompanion Function({
|
typedef $$MediaItemsTableCreateCompanionBuilder = MediaItemsCompanion Function({
|
||||||
Value<int> id,
|
Value<int> id,
|
||||||
required String title,
|
required String title,
|
||||||
|
@ -5287,6 +5287,329 @@ i1.GeneratedColumn<String> _column_62(String aliasedName) => i1.GeneratedColumn<
|
|||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string,
|
||||||
defaultValue: Variable(
|
defaultValue: Variable(
|
||||||
"{\"currentSet\": 0, \"currentRep\": 0, \"currentActionType\": 0, \"currentTime\": 0, \"currentAction\": 0}"));
|
"{\"currentSet\": 0, \"currentRep\": 0, \"currentActionType\": 0, \"currentTime\": 0, \"currentAction\": 0}"));
|
||||||
|
|
||||||
|
final class Schema34 extends i0.VersionedSchema {
|
||||||
|
Schema34({required super.database}) : super(version: 34);
|
||||||
|
@override
|
||||||
|
late final List<i1.DatabaseSchemaEntity> entities = [
|
||||||
|
sessions,
|
||||||
|
activities,
|
||||||
|
sessionActivities,
|
||||||
|
actions,
|
||||||
|
activityActions,
|
||||||
|
mediaItems,
|
||||||
|
objectMediaItems,
|
||||||
|
];
|
||||||
|
late final Shape12 sessions = Shape12(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'sessions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_1,
|
||||||
|
_column_2,
|
||||||
|
_column_3,
|
||||||
|
_column_11,
|
||||||
|
_column_20,
|
||||||
|
_column_4,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape17 activities = Shape17(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'activities',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_40,
|
||||||
|
_column_36,
|
||||||
|
_column_37,
|
||||||
|
_column_38,
|
||||||
|
_column_27,
|
||||||
|
_column_28,
|
||||||
|
_column_29,
|
||||||
|
_column_35,
|
||||||
|
_column_31,
|
||||||
|
_column_32,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape13 sessionActivities = Shape13(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'session_activities',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_21,
|
||||||
|
_column_22,
|
||||||
|
_column_19,
|
||||||
|
_column_10,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape21 actions = Shape21(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'actions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_41,
|
||||||
|
_column_2,
|
||||||
|
_column_42,
|
||||||
|
_column_43,
|
||||||
|
_column_44,
|
||||||
|
_column_45,
|
||||||
|
_column_46,
|
||||||
|
_column_47,
|
||||||
|
_column_48,
|
||||||
|
_column_49,
|
||||||
|
_column_53,
|
||||||
|
_column_54,
|
||||||
|
_column_51,
|
||||||
|
_column_52,
|
||||||
|
_column_58,
|
||||||
|
_column_62,
|
||||||
|
_column_12,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape22 activityActions = Shape22(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'activity_actions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_9,
|
||||||
|
_column_23,
|
||||||
|
_column_8,
|
||||||
|
_column_19,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape5 mediaItems = Shape5(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'media_items',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_41,
|
||||||
|
_column_2,
|
||||||
|
_column_25,
|
||||||
|
_column_6,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape6 objectMediaItems = Shape6(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'object_media_items',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_15,
|
||||||
|
_column_16,
|
||||||
|
_column_24,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shape22 extends i0.VersionedTable {
|
||||||
|
Shape22({required super.source, required super.alias}) : super.aliased();
|
||||||
|
i1.GeneratedColumn<int> get id =>
|
||||||
|
columnsByName['id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<int> get activityId =>
|
||||||
|
columnsByName['activity_id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<int> get actionId =>
|
||||||
|
columnsByName['action_id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<int> get sessionId =>
|
||||||
|
columnsByName['session_id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<int> get position =>
|
||||||
|
columnsByName['position']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<DateTime> get createdAt =>
|
||||||
|
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
}
|
||||||
|
|
||||||
|
final class Schema35 extends i0.VersionedSchema {
|
||||||
|
Schema35({required super.database}) : super(version: 35);
|
||||||
|
@override
|
||||||
|
late final List<i1.DatabaseSchemaEntity> entities = [
|
||||||
|
sessions,
|
||||||
|
activities,
|
||||||
|
sessionActivities,
|
||||||
|
actions,
|
||||||
|
activityActions,
|
||||||
|
mediaItems,
|
||||||
|
objectMediaItems,
|
||||||
|
];
|
||||||
|
late final Shape12 sessions = Shape12(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'sessions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_1,
|
||||||
|
_column_2,
|
||||||
|
_column_3,
|
||||||
|
_column_11,
|
||||||
|
_column_20,
|
||||||
|
_column_4,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape17 activities = Shape17(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'activities',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_40,
|
||||||
|
_column_36,
|
||||||
|
_column_37,
|
||||||
|
_column_38,
|
||||||
|
_column_27,
|
||||||
|
_column_28,
|
||||||
|
_column_29,
|
||||||
|
_column_35,
|
||||||
|
_column_31,
|
||||||
|
_column_32,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape13 sessionActivities = Shape13(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'session_activities',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_21,
|
||||||
|
_column_22,
|
||||||
|
_column_19,
|
||||||
|
_column_10,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape21 actions = Shape21(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'actions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_41,
|
||||||
|
_column_2,
|
||||||
|
_column_42,
|
||||||
|
_column_43,
|
||||||
|
_column_44,
|
||||||
|
_column_45,
|
||||||
|
_column_46,
|
||||||
|
_column_47,
|
||||||
|
_column_48,
|
||||||
|
_column_49,
|
||||||
|
_column_53,
|
||||||
|
_column_54,
|
||||||
|
_column_51,
|
||||||
|
_column_52,
|
||||||
|
_column_58,
|
||||||
|
_column_62,
|
||||||
|
_column_12,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape22 activityActions = Shape22(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'activity_actions',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_22,
|
||||||
|
_column_23,
|
||||||
|
_column_21,
|
||||||
|
_column_19,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape5 mediaItems = Shape5(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'media_items',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_41,
|
||||||
|
_column_2,
|
||||||
|
_column_25,
|
||||||
|
_column_6,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape6 objectMediaItems = Shape6(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'object_media_items',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_15,
|
||||||
|
_column_16,
|
||||||
|
_column_24,
|
||||||
|
_column_5,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
}
|
||||||
|
|
||||||
i0.MigrationStepWithVersion migrationSteps({
|
i0.MigrationStepWithVersion migrationSteps({
|
||||||
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
||||||
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
||||||
@ -5320,6 +5643,8 @@ i0.MigrationStepWithVersion migrationSteps({
|
|||||||
required Future<void> Function(i1.Migrator m, Schema31 schema) from30To31,
|
required Future<void> Function(i1.Migrator m, Schema31 schema) from30To31,
|
||||||
required Future<void> Function(i1.Migrator m, Schema32 schema) from31To32,
|
required Future<void> Function(i1.Migrator m, Schema32 schema) from31To32,
|
||||||
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
|
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema34 schema) from33To34,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema35 schema) from34To35,
|
||||||
}) {
|
}) {
|
||||||
return (currentVersion, database) async {
|
return (currentVersion, database) async {
|
||||||
switch (currentVersion) {
|
switch (currentVersion) {
|
||||||
@ -5483,6 +5808,16 @@ i0.MigrationStepWithVersion migrationSteps({
|
|||||||
final migrator = i1.Migrator(database, schema);
|
final migrator = i1.Migrator(database, schema);
|
||||||
await from32To33(migrator, schema);
|
await from32To33(migrator, schema);
|
||||||
return 33;
|
return 33;
|
||||||
|
case 33:
|
||||||
|
final schema = Schema34(database: database);
|
||||||
|
final migrator = i1.Migrator(database, schema);
|
||||||
|
await from33To34(migrator, schema);
|
||||||
|
return 34;
|
||||||
|
case 34:
|
||||||
|
final schema = Schema35(database: database);
|
||||||
|
final migrator = i1.Migrator(database, schema);
|
||||||
|
await from34To35(migrator, schema);
|
||||||
|
return 35;
|
||||||
default:
|
default:
|
||||||
throw ArgumentError.value('Unknown migration from $currentVersion');
|
throw ArgumentError.value('Unknown migration from $currentVersion');
|
||||||
}
|
}
|
||||||
@ -5522,6 +5857,8 @@ i1.OnUpgrade stepByStep({
|
|||||||
required Future<void> Function(i1.Migrator m, Schema31 schema) from30To31,
|
required Future<void> Function(i1.Migrator m, Schema31 schema) from30To31,
|
||||||
required Future<void> Function(i1.Migrator m, Schema32 schema) from31To32,
|
required Future<void> Function(i1.Migrator m, Schema32 schema) from31To32,
|
||||||
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
|
required Future<void> Function(i1.Migrator m, Schema33 schema) from32To33,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema34 schema) from33To34,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema35 schema) from34To35,
|
||||||
}) =>
|
}) =>
|
||||||
i0.VersionedSchema.stepByStepHelper(
|
i0.VersionedSchema.stepByStepHelper(
|
||||||
step: migrationSteps(
|
step: migrationSteps(
|
||||||
@ -5557,4 +5894,6 @@ i1.OnUpgrade stepByStep({
|
|||||||
from30To31: from30To31,
|
from30To31: from30To31,
|
||||||
from31To32: from31To32,
|
from31To32: from31To32,
|
||||||
from32To33: from32To33,
|
from32To33: from32To33,
|
||||||
|
from33To34: from33To34,
|
||||||
|
from34To35: from34To35,
|
||||||
));
|
));
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -43,14 +43,14 @@ Future<void> seedDb(AppDatabase database) async {
|
|||||||
['BgheYcxhrsw', MediaType.youtube]
|
['BgheYcxhrsw', MediaType.youtube]
|
||||||
];
|
];
|
||||||
|
|
||||||
final List<String> actionTypes = [
|
// final List<String> actionTypes = [
|
||||||
"[[{\"actionID\": 0, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 1, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 2, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 3, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 4, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 5, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}]]",
|
// "[[{\"actionID\": 0, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 1, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 2, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 3, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 4, \"name\": \"1, 3, 5\", \"type\": \"repititions\", \"amount\": 1, \"weight\": 0}, {\"actionID\": 5, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}]]",
|
||||||
"[[{\"actionID\": 0, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 1, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 2, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 3, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 4, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 5, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 6, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 7, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 8, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 9, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 10, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 11, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 12, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 13, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 14, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 15, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 16, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 17, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 18, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 19, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}]]"
|
// "[[{\"actionID\": 0, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 1, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 2, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 3, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 4, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 5, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 6, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 7, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 8, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 9, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 10, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 11, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 12, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 13, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 14, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 15, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}], [{\"actionID\": 16, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weight\": 80}, {\"actionID\": 17, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 5}, {\"actionID\": 18, \"name\": \"Long Pulls\", \"type\": \"seconds\", \"amount\": 5, \"weights\": 80}, {\"actionID\": 19, \"name\": \"Rest\", \"type\": \"seconds\", \"amount\": 300}]]"
|
||||||
];
|
// ];
|
||||||
|
|
||||||
final int totalSessions = 15;
|
final int totalSessions = 15;
|
||||||
final int totalActivities = 6;
|
final int totalActivities = 6;
|
||||||
final int totalActions = 5;
|
// final int totalActions = 5;
|
||||||
final int totalMedia = 5;
|
final int totalMedia = 5;
|
||||||
final random = Random();
|
final random = Random();
|
||||||
|
|
||||||
@ -73,7 +73,8 @@ Future<void> seedDb(AppDatabase database) async {
|
|||||||
|
|
||||||
Map<Symbol, Value> payload = {
|
Map<Symbol, Value> payload = {
|
||||||
Symbol('title'): Value<String>(exercise['name']),
|
Symbol('title'): Value<String>(exercise['name']),
|
||||||
Symbol('description'): Value<String>(json.encode(exercise['instructions'])),
|
Symbol('description'):
|
||||||
|
Value<String>(json.encode(exercise['instructions'])),
|
||||||
Symbol('force'): Value<String>(exercise['force'] ?? "")
|
Symbol('force'): Value<String>(exercise['force'] ?? "")
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -125,8 +126,7 @@ Future<void> seedDb(AppDatabase database) async {
|
|||||||
.into(database.mediaItems)
|
.into(database.mediaItems)
|
||||||
.insert(MediaItemsCompanion.insert(
|
.insert(MediaItemsCompanion.insert(
|
||||||
title: exercise['name'],
|
title: exercise['name'],
|
||||||
description:
|
description: exercise['name'],
|
||||||
exercise['name'],
|
|
||||||
reference: mediaItem,
|
reference: mediaItem,
|
||||||
type: MediaType.image))
|
type: MediaType.image))
|
||||||
.then((mediaId) async {
|
.then((mediaId) async {
|
||||||
@ -175,32 +175,56 @@ Future<void> seedDb(AppDatabase database) async {
|
|||||||
));
|
));
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
for (int k = 0; k <= random.nextInt(totalActions); k++) {
|
// await database
|
||||||
await database
|
// .into(database.actions)
|
||||||
.into(database.actions)
|
// .insert(ActionsCompanion.insert(
|
||||||
.insert(ActionsCompanion.insert(
|
// title: 'Test action',
|
||||||
title: 'Test action $k',
|
// description:
|
||||||
description:
|
// 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
||||||
'$k Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
// totalSets: 5,
|
||||||
totalSets: 5,
|
// totalReps: "[1]",
|
||||||
totalReps: "[1]",
|
// restBeforeSets: Value(30000),
|
||||||
restBeforeSets: Value(30000),
|
// restBetweenSets: Value(300000),
|
||||||
restBetweenSets: Value(300000),
|
// restBetweenReps: Value(15000),
|
||||||
restBetweenReps: Value(15000),
|
// restAfterSets: Value(300000),
|
||||||
restAfterSets: Value(300000),
|
// repType: RepType.time,
|
||||||
repType: RepType.time,
|
// repLength: Value(10000),
|
||||||
repLength: Value(10000),
|
// repWeights: Value("[110]"),
|
||||||
repWeights: Value("[110]"),
|
// setWeights: Value("[1]"),
|
||||||
setWeights: Value("[1]"),
|
// isAlternating: Value(true),
|
||||||
isAlternating: Value(true),
|
// set: actionTypes[random.nextInt(actionTypes.length)]))
|
||||||
set: actionTypes[random.nextInt(actionTypes.length)]))
|
// .then((actionId) async {
|
||||||
.then((actionId) async {
|
// // add activity action association
|
||||||
// add activity action association
|
// await database.into(database.activityActions).insert(
|
||||||
await database.into(database.activityActions).insert(
|
// ActivityActionsCompanion.insert(
|
||||||
ActivityActionsCompanion.insert(
|
// activityId: activityId, actionId: actionId, sessionId: sessionId, position: 0));
|
||||||
activityId: activityId, actionId: actionId, position: k));
|
// });
|
||||||
});
|
// for (int k = 0; k <= random.nextInt(totalActions); k++) {
|
||||||
}
|
// await database
|
||||||
|
// .into(database.actions)
|
||||||
|
// .insert(ActionsCompanion.insert(
|
||||||
|
// title: 'Test action $k',
|
||||||
|
// description:
|
||||||
|
// '$k Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
||||||
|
// totalSets: 5,
|
||||||
|
// totalReps: "[1]",
|
||||||
|
// restBeforeSets: Value(30000),
|
||||||
|
// restBetweenSets: Value(300000),
|
||||||
|
// restBetweenReps: Value(15000),
|
||||||
|
// restAfterSets: Value(300000),
|
||||||
|
// repType: RepType.time,
|
||||||
|
// repLength: Value(10000),
|
||||||
|
// repWeights: Value("[110]"),
|
||||||
|
// setWeights: Value("[1]"),
|
||||||
|
// isAlternating: Value(true),
|
||||||
|
// set: actionTypes[random.nextInt(actionTypes.length)]))
|
||||||
|
// .then((actionId) async {
|
||||||
|
// // add activity action association
|
||||||
|
// await database.into(database.activityActions).insert(
|
||||||
|
// ActivityActionsCompanion.insert(
|
||||||
|
// activityId: activityId, actionId: actionId, position: k));
|
||||||
|
// });
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int n = 0; n <= random.nextInt(totalMedia); n++) {
|
for (int n = 0; n <= random.nextInt(totalMedia); n++) {
|
||||||
|
@ -42,3 +42,21 @@ String jsonToDescription(List text) {
|
|||||||
|
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget formItemWrapper(Widget content,
|
||||||
|
[EdgeInsets padding = const EdgeInsets.fromLTRB(0, 0, 0, 0)]) {
|
||||||
|
return Expanded(child: Padding(padding: padding, child: content));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<DropdownMenuEntry> numericDropDownItems(String type, int itemLimit) {
|
||||||
|
final List<DropdownMenuEntry> items = [];
|
||||||
|
|
||||||
|
// String entryName = type;
|
||||||
|
|
||||||
|
for (int i = 0; i < itemLimit; i++) {
|
||||||
|
// if (i != 0) entryName = "${type}s";
|
||||||
|
items.add(DropdownMenuEntry(value: i + 1, label: "${i + 1}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
@ -79,6 +79,10 @@ class _AppState extends State<App> {
|
|||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: const Text('In Progress...'),
|
child: const Text('In Progress...'),
|
||||||
),
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: const Text('Profile in Progress...'),
|
||||||
|
),
|
||||||
][currentPageIndex]),
|
][currentPageIndex]),
|
||||||
bottomNavigationBar: NavigationBar(
|
bottomNavigationBar: NavigationBar(
|
||||||
onDestinationSelected: (int index) {
|
onDestinationSelected: (int index) {
|
||||||
@ -98,7 +102,9 @@ class _AppState extends State<App> {
|
|||||||
NavigationDestination(
|
NavigationDestination(
|
||||||
icon: Icon(Icons.group), label: "Team Send"),
|
icon: Icon(Icons.group), label: "Team Send"),
|
||||||
NavigationDestination(
|
NavigationDestination(
|
||||||
icon: Icon(Icons.analytics), label: "Progress")
|
icon: Icon(Icons.analytics), label: "Progress"),
|
||||||
|
NavigationDestination(
|
||||||
|
icon: Icon(Icons.account_circle_rounded), label: "Profile"),
|
||||||
]),
|
]),
|
||||||
floatingActionButton: FloatingActionButton.extended(
|
floatingActionButton: FloatingActionButton.extended(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -116,8 +122,7 @@ void main() {
|
|||||||
runApp(MultiProvider(
|
runApp(MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
Provider<AppDatabase>(
|
Provider<AppDatabase>(
|
||||||
create: (context) => db,
|
create: (context) => db, dispose: (context, db) => db.close()),
|
||||||
dispose: (context, db) => db.close()),
|
|
||||||
ChangeNotifierProvider(create: (context) => ActivityTimerModel()),
|
ChangeNotifierProvider(create: (context) => ActivityTimerModel()),
|
||||||
ChangeNotifierProvider(create: (context) => ActionTimer()),
|
ChangeNotifierProvider(create: (context) => ActionTimer()),
|
||||||
],
|
],
|
||||||
|
@ -96,7 +96,7 @@ class ActionModel {
|
|||||||
position: totalItems,
|
position: totalItems,
|
||||||
action: action,
|
action: action,
|
||||||
time: action.restAfterSets!,
|
time: action.restAfterSets!,
|
||||||
name: 'rest'));
|
name: 'cooldown'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
@ -164,8 +164,20 @@ class Set extends Item {
|
|||||||
if (action.repType == RepType.time) {
|
if (action.repType == RepType.time) {
|
||||||
for (int i = 0; i < totalReps; i++) {
|
for (int i = 0; i < totalReps; i++) {
|
||||||
position = position > 0 ? position + 1 : position;
|
position = position > 0 ? position + 1 : position;
|
||||||
|
|
||||||
|
// don't show a rest before first rep
|
||||||
|
if (i > 0) {
|
||||||
|
items.add(Rest(
|
||||||
|
id: position,
|
||||||
|
position: position,
|
||||||
|
parentId: id,
|
||||||
|
action: action,
|
||||||
|
time: action.restBetweenReps,
|
||||||
|
name: 'rest'));
|
||||||
|
}
|
||||||
|
|
||||||
items.add(Reps(
|
items.add(Reps(
|
||||||
id: position, position: position, parentId: id, action: action));
|
id: ++position, position: position, parentId: id, action: action));
|
||||||
|
|
||||||
if (action.isAlternating) {
|
if (action.isAlternating) {
|
||||||
items.add(Rest(
|
items.add(Rest(
|
||||||
@ -180,17 +192,6 @@ class Set extends Item {
|
|||||||
position: position,
|
position: position,
|
||||||
parentId: id,
|
parentId: id,
|
||||||
action: action));
|
action: action));
|
||||||
|
|
||||||
// don't show a rest after the last rep
|
|
||||||
if (i < totalReps - 1) {
|
|
||||||
items.add(Rest(
|
|
||||||
id: ++position,
|
|
||||||
position: position,
|
|
||||||
parentId: id,
|
|
||||||
action: action,
|
|
||||||
time: action.restBetweenReps,
|
|
||||||
name: 'prepare'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2,6 +2,9 @@ import 'dart:async';
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_sound/public/flutter_sound_player.dart';
|
||||||
|
import 'package:flutter_sound/flutter_sound.dart';
|
||||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/models/action_model.dart';
|
import 'package:sendtrain/models/action_model.dart';
|
||||||
@ -11,6 +14,7 @@ class ActionTimer with ChangeNotifier {
|
|||||||
double _progress = 0;
|
double _progress = 0;
|
||||||
int _currentTime = 0;
|
int _currentTime = 0;
|
||||||
final List<ItemScrollController> _scrollControllers = [];
|
final List<ItemScrollController> _scrollControllers = [];
|
||||||
|
final FlutterSoundPlayer _mPlayer = FlutterSoundPlayer();
|
||||||
|
|
||||||
ActionTimer();
|
ActionTimer();
|
||||||
|
|
||||||
@ -51,27 +55,41 @@ class ActionTimer with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setup(ActionModel actionModel, ItemScrollController scrollController,
|
void setup(ActionModel actionModel, ItemScrollController scrollController,
|
||||||
[bool resetOnLoad = true]) {
|
[bool resetOnLoad = true]) async {
|
||||||
|
_scrollControllers.add(scrollController);
|
||||||
|
|
||||||
if (resetOnLoad) {
|
if (resetOnLoad) {
|
||||||
if (this.actionModel == actionModel) {
|
if (this.actionModel == actionModel) {
|
||||||
reset();
|
reset();
|
||||||
|
_scrollControllers.add(scrollController);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actionModel = actionModel;
|
this.actionModel = actionModel;
|
||||||
setAction(currentAction.id);
|
setAction(currentAction.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
_scrollControllers.add(scrollController);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future pause() async =>
|
Future pause() async =>
|
||||||
await actionModel?.updateStatus(ActionStatus.paused).whenComplete(() {
|
await actionModel?.updateStatus(ActionStatus.paused).whenComplete(() {
|
||||||
_periodicTimer?.cancel();
|
_periodicTimer?.cancel();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
||||||
|
// _mPlayer.stopPlayer();
|
||||||
|
// Be careful : you must `close` the audio session when you have finished with it.
|
||||||
});
|
});
|
||||||
|
|
||||||
Future start() async {
|
Future start() async {
|
||||||
await actionModel!.updateStatus(ActionStatus.started);
|
await actionModel!.updateStatus(ActionStatus.started);
|
||||||
|
await _mPlayer.openPlayer();
|
||||||
|
|
||||||
|
Uint8List? countTone;
|
||||||
|
Uint8List? finishTone;
|
||||||
|
await rootBundle
|
||||||
|
.load('assets/audio/count_tone.wav')
|
||||||
|
.then((data) => countTone = data.buffer.asUint8List());
|
||||||
|
await rootBundle
|
||||||
|
.load('assets/audio/count_finish.mp3')
|
||||||
|
.then((data) => finishTone = data.buffer.asUint8List());
|
||||||
|
|
||||||
// start timer
|
// start timer
|
||||||
if (_periodicTimer == null || _periodicTimer!.isActive == false) {
|
if (_periodicTimer == null || _periodicTimer!.isActive == false) {
|
||||||
@ -83,8 +101,15 @@ class ActionTimer with ChangeNotifier {
|
|||||||
case RepType.time:
|
case RepType.time:
|
||||||
_currentTime--;
|
_currentTime--;
|
||||||
|
|
||||||
|
if (_currentTime <= 3 && _currentTime != 0) {
|
||||||
|
await _mPlayer.startPlayer(
|
||||||
|
fromDataBuffer: countTone, codec: Codec.pcm16WAV);
|
||||||
|
}
|
||||||
|
|
||||||
if (_currentTime == 0) {
|
if (_currentTime == 0) {
|
||||||
// move to next action
|
// move to next action
|
||||||
|
await _mPlayer.startPlayer(
|
||||||
|
fromDataBuffer: finishTone, codec: Codec.mp3);
|
||||||
await setAction(state['currentAction'] + 1);
|
await setAction(state['currentAction'] + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,18 +122,21 @@ class ActionTimer with ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future close() async =>
|
Future close() async => await actionModel!
|
||||||
await actionModel!.updateStatus(ActionStatus.complete).whenComplete(() {
|
.updateStatus(ActionStatus.complete)
|
||||||
|
.whenComplete(() async {
|
||||||
_periodicTimer!.cancel();
|
_periodicTimer!.cancel();
|
||||||
|
_mPlayer.closePlayer();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
|
|
||||||
Future reset() async {
|
Future reset() async {
|
||||||
await actionModel!.updateStatus(ActionStatus.pending);
|
await actionModel?.updateStatus(ActionStatus.pending);
|
||||||
await actionModel!.updateState(json.encode(_stateConstructor()));
|
await actionModel?.updateState(json.encode(_stateConstructor()));
|
||||||
_periodicTimer?.cancel();
|
_periodicTimer?.cancel();
|
||||||
_progress = 0;
|
_progress = 0;
|
||||||
_scrollControllers.clear();
|
_scrollControllers.clear();
|
||||||
|
_mPlayer.closePlayer();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,39 +162,49 @@ class ActionTimer with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setAction(int actionNum, [bool isManual = false]) async {
|
setAction(int actionNum, [bool isManual = false]) async {
|
||||||
Item item = allActions[actionNum];
|
if (actionNum < allActions.length) {
|
||||||
Map newState = state;
|
Item item = allActions[actionNum];
|
||||||
|
Map newState = state;
|
||||||
|
|
||||||
newState['currentAction'] = actionNum;
|
newState['currentAction'] = actionNum;
|
||||||
newState['currentSet'] = item.parentId;
|
newState['currentSet'] = item.parentId;
|
||||||
newState['currentRep'] = item.id;
|
newState['currentRep'] = item.id;
|
||||||
newState['currentTime'] = _currentTime = item.value!;
|
newState['currentTime'] = _currentTime = item.value!;
|
||||||
|
|
||||||
await actionModel!
|
await actionModel!
|
||||||
.updateState(json.encode(newState))
|
.updateState(json.encode(newState))
|
||||||
.whenComplete(() async {
|
.whenComplete(() async {
|
||||||
if (isManual) {
|
// if manual select, pause next action
|
||||||
await pause();
|
if (isManual) {
|
||||||
await updateProgress();
|
await pause();
|
||||||
}
|
await updateProgress();
|
||||||
|
}
|
||||||
|
|
||||||
int index = currentAction.parentId != null
|
int index = currentAction.parentId != null
|
||||||
? currentAction.parentId!
|
? currentAction.parentId!
|
||||||
: currentAction.id;
|
: currentAction.id;
|
||||||
|
|
||||||
for (int i = 0; i < _scrollControllers.length; i++) {
|
if (_scrollControllers.isNotEmpty) {
|
||||||
ItemScrollController sc = _scrollControllers[i];
|
for (int i = 0; i < _scrollControllers.length; i++) {
|
||||||
|
ItemScrollController sc = _scrollControllers[i];
|
||||||
|
|
||||||
sc.scrollTo(
|
sc.scrollTo(
|
||||||
index: index,
|
index: index,
|
||||||
duration: Duration(milliseconds: 500),
|
duration: Duration(milliseconds: 500),
|
||||||
curve: Curves.easeInOutCubic);
|
curve: Curves.easeInOutCubic);
|
||||||
}
|
}
|
||||||
// _scrollController?.scrollTo(
|
}
|
||||||
// index: index,
|
// _scrollController?.scrollTo(
|
||||||
// duration: Duration(milliseconds: 500),
|
// index: index,
|
||||||
// curve: Curves.easeInOutCubic);
|
// duration: Duration(milliseconds: 500),
|
||||||
});
|
// curve: Curves.easeInOutCubic);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await actionModel?.updateStatus(ActionStatus.complete).whenComplete(() {
|
||||||
|
_periodicTimer?.cancel();
|
||||||
|
notifyListeners();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,305 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:drift/drift.dart' hide Column;
|
||||||
import 'package:flutter/material.dart' hide Action;
|
import 'package:flutter/material.dart' hide Action;
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:sendtrain/daos/actions_dao.dart';
|
||||||
|
import 'package:sendtrain/daos/activity_actions_dao.dart';
|
||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
||||||
|
import 'package:sendtrain/widgets/generic/elements/form_drop_down.dart';
|
||||||
import 'package:sendtrain/widgets/generic/elements/form_text_input.dart';
|
import 'package:sendtrain/widgets/generic/elements/form_text_input.dart';
|
||||||
|
|
||||||
class ActivityActionEditor extends StatelessWidget {
|
class ActivityActionEditor extends StatefulWidget {
|
||||||
ActivityActionEditor({super.key, required this.action, this.callback});
|
const ActivityActionEditor(
|
||||||
|
{super.key,
|
||||||
|
required this.session,
|
||||||
|
required this.activity,
|
||||||
|
this.action,
|
||||||
|
this.callback});
|
||||||
|
|
||||||
final Action action;
|
final Session session;
|
||||||
|
final Activity activity;
|
||||||
|
final Action? action;
|
||||||
final Function? callback;
|
final Function? callback;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ActivityActionEditor> createState() => _ActivityActionEditorState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ActivityActionEditorState extends State<ActivityActionEditor> {
|
||||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
final Map<String, TextEditingController> actionEditController = {
|
final Map<String, TextEditingController> actionEditController = {
|
||||||
'sets': TextEditingController(),
|
'sets': TextEditingController(),
|
||||||
'reps': TextEditingController(),
|
'reps': TextEditingController(),
|
||||||
'weight': TextEditingController(),
|
'weight': TextEditingController(),
|
||||||
|
'repLength': TextEditingController(),
|
||||||
|
'preparation': TextEditingController(),
|
||||||
|
'setRest': TextEditingController(),
|
||||||
|
'repRest': TextEditingController(),
|
||||||
|
'cooldown': TextEditingController(),
|
||||||
|
'type': TextEditingController(),
|
||||||
|
'alternating': TextEditingController(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
late final AppDatabase db;
|
||||||
|
|
||||||
|
bool isAlternating = false;
|
||||||
|
bool isTimed = false;
|
||||||
|
String editorType = 'Create';
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
db = Provider.of<AppDatabase>(context, listen: false);
|
||||||
|
|
||||||
|
// if we're editing a session, we'll want to populate it with the appropriate values
|
||||||
|
if (widget.action != null) {
|
||||||
|
final Action action = widget.action!;
|
||||||
|
editorType = 'Edit';
|
||||||
|
isAlternating = action.isAlternating;
|
||||||
|
isTimed = action.repType == RepType.time ? true : false;
|
||||||
|
|
||||||
|
actionEditController['sets']?.text = action.totalSets.toString();
|
||||||
|
actionEditController['reps']?.text =
|
||||||
|
json.decode(action.totalReps)[0].toString();
|
||||||
|
actionEditController['weight']?.text =
|
||||||
|
json.decode(action.repWeights ?? "")[0].toString();
|
||||||
|
actionEditController['repLength']?.text =
|
||||||
|
((action.repLength ?? 0) ~/ 1000).toString();
|
||||||
|
actionEditController['preparation']?.text =
|
||||||
|
((action.restBeforeSets ?? 0) ~/ 1000).toString();
|
||||||
|
actionEditController['setRest']?.text =
|
||||||
|
((action.restBetweenSets ?? 0) ~/ 1000).toString();
|
||||||
|
actionEditController['repRest']?.text =
|
||||||
|
((action.restBetweenReps ?? 0) ~/ 1000).toString();
|
||||||
|
actionEditController['cooldown']?.text =
|
||||||
|
((action.restAfterSets ?? 0) ~/ 1000).toString();
|
||||||
|
actionEditController['isTimed']?.text = isTimed.toString();
|
||||||
|
actionEditController['alternating']?.text = isAlternating.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
String editorType = 'Create';
|
if (widget.action != null) {
|
||||||
|
editorType = 'Edit';
|
||||||
|
}
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
|
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
|
||||||
child: Form(
|
child: Form(
|
||||||
key: _formKey,
|
key: _formKey,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 10, bottom: 10),
|
padding: EdgeInsets.only(top: 10, bottom: 10),
|
||||||
child: Text('$editorType Action',
|
child: Text('$editorType Action',
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.titleLarge)),
|
style: Theme.of(context).textTheme.titleLarge)),
|
||||||
FormTextInput(
|
Row(children: [
|
||||||
controller: actionEditController['sets']!,
|
formItemWrapper(
|
||||||
title: 'Total Sets'),])));
|
CheckboxListTile(
|
||||||
|
title: Text("Reps alternate? (eg. Left/Right Hand)"),
|
||||||
|
value: isAlternating,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
),
|
||||||
|
onChanged: (bool? value) {
|
||||||
|
setState(() {
|
||||||
|
isAlternating = value!;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
EdgeInsets.fromLTRB(10, 10, 10, 10)),
|
||||||
|
]),
|
||||||
|
Row(children: [
|
||||||
|
formItemWrapper(
|
||||||
|
CheckboxListTile(
|
||||||
|
title: Text("Are reps timed?"),
|
||||||
|
value: isTimed,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
),
|
||||||
|
onChanged: (bool? value) {
|
||||||
|
setState(() {
|
||||||
|
isTimed = value!;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
EdgeInsets.fromLTRB(10, 10, 10, 15))
|
||||||
|
]),
|
||||||
|
Row(children: [
|
||||||
|
FormDropDown(
|
||||||
|
title: 'Sets',
|
||||||
|
entries: numericDropDownItems('Set', 50),
|
||||||
|
controller: actionEditController['sets']!),
|
||||||
|
FormDropDown(
|
||||||
|
title: 'Reps',
|
||||||
|
entries: numericDropDownItems('Rep', 100),
|
||||||
|
controller: actionEditController['reps']!,
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
Row(children: [
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['preparation']!,
|
||||||
|
title: 'Preparation (sec)',
|
||||||
|
hint: 'time before start',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.fromLTRB(10, 5, 10, 0)),
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['cooldown']!,
|
||||||
|
title: 'Cooldown (sec)',
|
||||||
|
hint: 'rest after completion',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.fromLTRB(10, 5, 10, 0)),
|
||||||
|
]),
|
||||||
|
Row(children: [
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['setRest']!,
|
||||||
|
title: 'Set Rest (sec)',
|
||||||
|
hint: 'Rest between sets',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.only(left: 10, right: 10)),
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['repRest']!,
|
||||||
|
title: 'Rep Rest (sec)',
|
||||||
|
hint: 'Rest between reps',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.only(left: 10, right: 10)),
|
||||||
|
]),
|
||||||
|
Row(children: [
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['repLength']!,
|
||||||
|
title: 'Rep Length (sec)',
|
||||||
|
hint: 'Total rep time (not required)',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.only(left: 10, right: 10)),
|
||||||
|
formItemWrapper(
|
||||||
|
FormTextInput(
|
||||||
|
type: InputTypes.number,
|
||||||
|
controller: actionEditController['weight']!,
|
||||||
|
title: 'Weight',
|
||||||
|
hint: 'Weight for reps',
|
||||||
|
requiresValidation: false),
|
||||||
|
EdgeInsets.only(left: 10, right: 10)),
|
||||||
|
]),
|
||||||
|
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 10, right: 10),
|
||||||
|
child: FilledButton(
|
||||||
|
onPressed: () async {
|
||||||
|
if (_formKey.currentState!.validate()) {
|
||||||
|
if (widget.action != null) {
|
||||||
|
Action newAction = widget.action!.copyWith(
|
||||||
|
totalSets: int.parse(
|
||||||
|
actionEditController['sets']!.text),
|
||||||
|
totalReps: json.encode([
|
||||||
|
int.parse(
|
||||||
|
actionEditController['reps']!.text)
|
||||||
|
]),
|
||||||
|
repLength: Value<int>(int.parse(
|
||||||
|
actionEditController['repLength']!
|
||||||
|
.text) *
|
||||||
|
1000),
|
||||||
|
restBeforeSets: Value<int>(int.parse(
|
||||||
|
actionEditController['preparation']!
|
||||||
|
.text) *
|
||||||
|
1000),
|
||||||
|
restBetweenSets: Value<int>(int.parse(
|
||||||
|
actionEditController['setRest']!
|
||||||
|
.text) *
|
||||||
|
1000),
|
||||||
|
restBetweenReps: Value<int>(int.parse(
|
||||||
|
actionEditController['repRest']!
|
||||||
|
.text) *
|
||||||
|
1000),
|
||||||
|
restAfterSets: Value<int>(int.parse(
|
||||||
|
actionEditController['cooldown']!
|
||||||
|
.text) *
|
||||||
|
1000),
|
||||||
|
repType: int.parse(actionEditController[
|
||||||
|
'repLength']!
|
||||||
|
.text) >
|
||||||
|
0
|
||||||
|
? RepType.time
|
||||||
|
: RepType.count,
|
||||||
|
repWeights: Value<String>(json.encode([
|
||||||
|
int.parse(
|
||||||
|
actionEditController['weight']!.text)
|
||||||
|
])),
|
||||||
|
// setWeights: Value<String>(json.encode([actionEditController['setWeights']!.text])),
|
||||||
|
isAlternating: isAlternating,
|
||||||
|
);
|
||||||
|
|
||||||
|
// var result = await ActionsDao(db).createOrUpdate(
|
||||||
|
// newAction.toCompanion(true));
|
||||||
|
await ActionsDao(db).replace(newAction);
|
||||||
|
} else {
|
||||||
|
// create action
|
||||||
|
await ActionsDao(db)
|
||||||
|
.createOrUpdate(ActionsCompanion(
|
||||||
|
title: Value('title'),
|
||||||
|
description: Value('description'),
|
||||||
|
totalSets: Value(int.parse(
|
||||||
|
actionEditController['sets']!
|
||||||
|
.text)),
|
||||||
|
totalReps: Value(json.encode(
|
||||||
|
[int.parse(actionEditController['reps']!.text)])),
|
||||||
|
repLength: Value<int>(
|
||||||
|
int.parse(actionEditController['repLength']!.text) *
|
||||||
|
1000),
|
||||||
|
restBeforeSets: Value<int>(
|
||||||
|
int.parse(actionEditController['preparation']!.text) *
|
||||||
|
1000),
|
||||||
|
restBetweenSets: Value<int>(
|
||||||
|
int.parse(actionEditController['setRest']!.text) *
|
||||||
|
1000),
|
||||||
|
restBetweenReps:
|
||||||
|
Value<int>(int.parse(actionEditController['repRest']!.text) * 1000),
|
||||||
|
restAfterSets: Value<int>(int.parse(actionEditController['cooldown']!.text) * 1000),
|
||||||
|
repType: Value(int.parse(actionEditController['repLength']!.text) > 0 ? RepType.time : RepType.count),
|
||||||
|
repWeights: Value<String>(json.encode([int.parse(actionEditController['weight']!.text)])),
|
||||||
|
// setWeights: Value<String>(json.encode([actionEditController['setWeights']!.text])),
|
||||||
|
isAlternating: Value<bool>(isAlternating),
|
||||||
|
// repType: RepType.values.firstWhere((e) => e.toString() == "RepType.${actionEditController['repType']!.text}"),
|
||||||
|
set: Value("")))
|
||||||
|
.then((actionId) {
|
||||||
|
ActivityActionsDao(db).createOrUpdate(
|
||||||
|
ActivityActionsCompanion(
|
||||||
|
activityId:
|
||||||
|
Value(widget.activity.id),
|
||||||
|
sessionId: Value(widget.session.id),
|
||||||
|
actionId: Value(actionId),
|
||||||
|
position: Value(0)));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Navigator.pop(
|
||||||
|
_formKey.currentContext!, 'Submit');
|
||||||
|
|
||||||
|
if (widget.callback != null) {
|
||||||
|
await widget.callback!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Text('Submit')))
|
||||||
|
])
|
||||||
|
])));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,20 +3,32 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
|
||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/extensions/string_extensions.dart';
|
import 'package:sendtrain/extensions/string_extensions.dart';
|
||||||
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
||||||
import 'package:sendtrain/models/action_model.dart';
|
import 'package:sendtrain/models/action_model.dart';
|
||||||
import 'package:sendtrain/providers/action_timer.dart';
|
import 'package:sendtrain/providers/action_timer.dart';
|
||||||
|
import 'package:sendtrain/widgets/activities/activity_action_editor.dart';
|
||||||
import 'package:sendtrain/widgets/generic/elements/add_card_generic.dart';
|
import 'package:sendtrain/widgets/generic/elements/add_card_generic.dart';
|
||||||
|
|
||||||
class ActivityActionView extends StatefulWidget {
|
// class ActivityActionView extends StatefulWidget {
|
||||||
const ActivityActionView({super.key, required this.actions, this.resetOnLoad = true});
|
class ActivityActionView extends StatelessWidget {
|
||||||
|
ActivityActionView(
|
||||||
|
{super.key,
|
||||||
|
required this.session,
|
||||||
|
required this.activity,
|
||||||
|
required this.actions,
|
||||||
|
this.callback,
|
||||||
|
this.resetOnLoad = true});
|
||||||
|
final Session session;
|
||||||
|
final Activity activity;
|
||||||
final List actions;
|
final List actions;
|
||||||
|
final Function? callback;
|
||||||
final bool resetOnLoad;
|
final bool resetOnLoad;
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
State<ActivityActionView> createState() => ActivityActionViewState();
|
// State<ActivityActionView> createState() => ActivityActionViewState();
|
||||||
}
|
// }
|
||||||
|
|
||||||
class ActivityActionViewState extends State<ActivityActionView> {
|
// class ActivityActionViewState extends State<ActivityActionView> {
|
||||||
// class ActivityActionView extends StatelessWidget {
|
// class ActivityActionView extends StatelessWidget {
|
||||||
// ActivityActionView({super.key, required this.actions});
|
// ActivityActionView({super.key, required this.actions});
|
||||||
|
|
||||||
@ -30,7 +42,7 @@ class ActivityActionViewState extends State<ActivityActionView> {
|
|||||||
ScrollOffsetListener.create();
|
ScrollOffsetListener.create();
|
||||||
|
|
||||||
late final ActionTimer at;
|
late final ActionTimer at;
|
||||||
int actionCount = 0;
|
// int actionCount = 0;
|
||||||
|
|
||||||
GestureDetector gtBuild(
|
GestureDetector gtBuild(
|
||||||
ActionTimer at, Item item, int actionNum, int selectedIndex,
|
ActionTimer at, Item item, int actionNum, int selectedIndex,
|
||||||
@ -68,17 +80,23 @@ class ActivityActionViewState extends State<ActivityActionView> {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
void initState() {
|
// void initState() {
|
||||||
super.initState();
|
// super.initState();
|
||||||
at = Provider.of<ActionTimer>(context, listen: false);
|
// at = Provider.of<ActionTimer>(context, listen: false);
|
||||||
}
|
// }
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (widget.actions.isNotEmpty) {
|
at = Provider.of<ActionTimer>(context, listen: false);
|
||||||
at.setup(ActionModel(
|
int actionCount = 0;
|
||||||
action: widget.actions.first, db: Provider.of<AppDatabase>(context)), itemScrollController, widget.resetOnLoad);
|
if (actions.isNotEmpty) {
|
||||||
|
at.setup(
|
||||||
|
ActionModel(
|
||||||
|
action: actions.first,
|
||||||
|
db: Provider.of<AppDatabase>(context)),
|
||||||
|
itemScrollController,
|
||||||
|
resetOnLoad);
|
||||||
|
|
||||||
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
// if (itemScrollController.isAttached) {
|
// if (itemScrollController.isAttached) {
|
||||||
@ -117,7 +135,7 @@ class ActivityActionViewState extends State<ActivityActionView> {
|
|||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
if (at.started)
|
if (at.started)
|
||||||
{at.pause()}
|
{at.pause()}
|
||||||
else if (at.available)
|
else if (at.available || at.complete)
|
||||||
{at.start()}
|
{at.start()}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -220,7 +238,12 @@ class ActivityActionViewState extends State<ActivityActionView> {
|
|||||||
description:
|
description:
|
||||||
'Click here to create an exercise template (sets and reps, etc) for your activity!',
|
'Click here to create an exercise template (sets and reps, etc) for your activity!',
|
||||||
action: () {
|
action: () {
|
||||||
print('teset');
|
showEditorSheet(
|
||||||
|
context,
|
||||||
|
ActivityActionEditor(
|
||||||
|
session: session,
|
||||||
|
activity: activity,
|
||||||
|
callback: callback));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ class ActivityCardState extends State<ActivityCard> {
|
|||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => showGenericDialog(
|
onTap: () => showGenericDialog(
|
||||||
ActivityView(activity: widget.activity), context),
|
ActivityView(session: widget.session, activity: widget.activity), context),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
|
@ -7,6 +7,7 @@ import 'package:sendtrain/daos/actions_dao.dart';
|
|||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/extensions/string_extensions.dart';
|
import 'package:sendtrain/extensions/string_extensions.dart';
|
||||||
import 'package:sendtrain/helpers/widget_helpers.dart';
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
||||||
|
import 'package:sendtrain/providers/action_timer.dart';
|
||||||
import 'package:sendtrain/widgets/activities/activity_action_editor.dart';
|
import 'package:sendtrain/widgets/activities/activity_action_editor.dart';
|
||||||
import 'package:sendtrain/widgets/activities/activity_action_view.dart';
|
import 'package:sendtrain/widgets/activities/activity_action_view.dart';
|
||||||
import 'package:sendtrain/widgets/activities/activity_view_categories.dart';
|
import 'package:sendtrain/widgets/activities/activity_view_categories.dart';
|
||||||
@ -14,7 +15,9 @@ import 'package:sendtrain/widgets/activities/activity_view_media.dart';
|
|||||||
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
||||||
|
|
||||||
class ActivityView extends StatefulWidget {
|
class ActivityView extends StatefulWidget {
|
||||||
const ActivityView({super.key, required this.activity});
|
const ActivityView(
|
||||||
|
{super.key, required this.session, required this.activity});
|
||||||
|
final Session session;
|
||||||
final Activity activity;
|
final Activity activity;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -22,6 +25,17 @@ class ActivityView extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ActivityViewState extends State<ActivityView> {
|
class _ActivityViewState extends State<ActivityView> {
|
||||||
|
final _fabKey = GlobalKey<ExpandableFabState>();
|
||||||
|
|
||||||
|
void resetState() async {
|
||||||
|
final state = _fabKey.currentState;
|
||||||
|
if (state != null && state.isOpen) {
|
||||||
|
state.toggle();
|
||||||
|
}
|
||||||
|
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
List<ActivityMuscle> activityMuscle(Activity activity) {
|
List<ActivityMuscle> activityMuscle(Activity activity) {
|
||||||
List<ActivityMuscle> muscles = [];
|
List<ActivityMuscle> muscles = [];
|
||||||
|
|
||||||
@ -39,10 +53,11 @@ class _ActivityViewState extends State<ActivityView> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final Activity activity = widget.activity;
|
final Activity activity = widget.activity;
|
||||||
|
final Session session = widget.session;
|
||||||
|
|
||||||
return FutureBuilder<List>(
|
return FutureBuilder<List>(
|
||||||
future: ActionsDao(Provider.of<AppDatabase>(context))
|
future: ActionsDao(Provider.of<AppDatabase>(context))
|
||||||
.fromActivity(activity),
|
.fromActivity(activity, session),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
List<Action> actions = snapshot.data! as List<Action>;
|
List<Action> actions = snapshot.data! as List<Action>;
|
||||||
@ -61,12 +76,19 @@ class _ActivityViewState extends State<ActivityView> {
|
|||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
floatingActionButtonLocation: ExpandableFab.location,
|
floatingActionButtonLocation: ExpandableFab.location,
|
||||||
floatingActionButton: ExpandableFab(
|
floatingActionButton: ExpandableFab(
|
||||||
|
key: _fabKey,
|
||||||
distance: 70,
|
distance: 70,
|
||||||
type: ExpandableFabType.up,
|
type: ExpandableFabType.up,
|
||||||
overlayStyle: ExpandableFabOverlayStyle(
|
overlayStyle: ExpandableFabOverlayStyle(
|
||||||
color: Colors.black.withOpacity(0.5),
|
color: Colors.black.withOpacity(0.5),
|
||||||
blur: 10,
|
blur: 10,
|
||||||
),
|
),
|
||||||
|
onOpen: () {
|
||||||
|
// pause the activity on open
|
||||||
|
ActionTimer at =
|
||||||
|
Provider.of<ActionTimer>(context, listen: false);
|
||||||
|
if (at.started) at.pause();
|
||||||
|
},
|
||||||
children: [
|
children: [
|
||||||
// FloatingActionButton.extended(
|
// FloatingActionButton.extended(
|
||||||
// icon: const Icon(Icons.upload_outlined),
|
// icon: const Icon(Icons.upload_outlined),
|
||||||
@ -80,7 +102,10 @@ class _ActivityViewState extends State<ActivityView> {
|
|||||||
showEditorSheet(
|
showEditorSheet(
|
||||||
context,
|
context,
|
||||||
ActivityActionEditor(
|
ActivityActionEditor(
|
||||||
action: actions.first, callback: () {}));
|
session: session,
|
||||||
|
activity: activity,
|
||||||
|
action: actions.first,
|
||||||
|
callback: resetState));
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
FloatingActionButton.extended(
|
FloatingActionButton.extended(
|
||||||
@ -228,7 +253,10 @@ class _ActivityViewState extends State<ActivityView> {
|
|||||||
context,
|
context,
|
||||||
Column(children: [
|
Column(children: [
|
||||||
ActivityActionView(
|
ActivityActionView(
|
||||||
|
session: session,
|
||||||
|
activity: activity,
|
||||||
actions: actions,
|
actions: actions,
|
||||||
|
callback: resetState,
|
||||||
resetOnLoad: false)
|
resetOnLoad: false)
|
||||||
]),
|
]),
|
||||||
Theme.of(context).colorScheme.surface);
|
Theme.of(context).colorScheme.surface);
|
||||||
@ -237,7 +265,11 @@ class _ActivityViewState extends State<ActivityView> {
|
|||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
)
|
)
|
||||||
])),
|
])),
|
||||||
ActivityActionView(actions: actions)
|
ActivityActionView(
|
||||||
|
session: session,
|
||||||
|
activity: activity,
|
||||||
|
actions: actions,
|
||||||
|
callback: resetState)
|
||||||
])));
|
])));
|
||||||
// ] +
|
// ] +
|
||||||
// action(actions, context)));
|
// action(actions, context)));
|
||||||
|
32
lib/widgets/generic/elements/form_drop_down.dart
Normal file
32
lib/widgets/generic/elements/form_drop_down.dart
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
||||||
|
|
||||||
|
class FormDropDown extends StatelessWidget {
|
||||||
|
const FormDropDown(
|
||||||
|
{super.key,
|
||||||
|
required this.title,
|
||||||
|
required this.entries,
|
||||||
|
required this.controller});
|
||||||
|
|
||||||
|
final List<DropdownMenuEntry> entries;
|
||||||
|
final String title;
|
||||||
|
final TextEditingController controller;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return formItemWrapper(
|
||||||
|
DropdownMenu(
|
||||||
|
leadingIcon: Icon(Icons.select_all_rounded),
|
||||||
|
initialSelection: controller.text,
|
||||||
|
controller: controller,
|
||||||
|
expandedInsets: EdgeInsets.zero,
|
||||||
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
|
filled: true,
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderSide: BorderSide.none,
|
||||||
|
borderRadius: BorderRadius.circular(12))),
|
||||||
|
label: Text(title),
|
||||||
|
dropdownMenuEntries: entries),
|
||||||
|
EdgeInsets.fromLTRB(10, 5, 10, 5));
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
enum InputTypes { text, number }
|
||||||
|
|
||||||
class FormTextInput extends StatelessWidget {
|
class FormTextInput extends StatelessWidget {
|
||||||
const FormTextInput(
|
const FormTextInput(
|
||||||
@ -9,7 +12,10 @@ class FormTextInput extends StatelessWidget {
|
|||||||
this.maxLines,
|
this.maxLines,
|
||||||
this.minLines,
|
this.minLines,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
this.requiresValidation=true});
|
this.requiresValidation = true,
|
||||||
|
this.type = InputTypes.text,
|
||||||
|
this.hint,
|
||||||
|
this.validations});
|
||||||
|
|
||||||
final TextEditingController controller;
|
final TextEditingController controller;
|
||||||
final String title;
|
final String title;
|
||||||
@ -18,12 +24,25 @@ class FormTextInput extends StatelessWidget {
|
|||||||
final Icon? icon;
|
final Icon? icon;
|
||||||
final dynamic onTap;
|
final dynamic onTap;
|
||||||
final bool requiresValidation;
|
final bool requiresValidation;
|
||||||
|
final InputTypes type;
|
||||||
|
final String? hint;
|
||||||
|
final Function? validations;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final Map params = {};
|
||||||
|
if (type == InputTypes.number) {
|
||||||
|
params['keyboardType'] = TextInputType.number;
|
||||||
|
params['inputFormatters'] = <TextInputFormatter>[
|
||||||
|
FilteringTextInputFormatter.digitsOnly
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(top: 10, bottom: 10),
|
padding: EdgeInsets.only(top: 10, bottom: 10),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
|
keyboardType: params['keyboardType'] ?? TextInputType.text,
|
||||||
|
inputFormatters: params['inputFormatters'] ?? [],
|
||||||
minLines: minLines ?? 1,
|
minLines: minLines ?? 1,
|
||||||
maxLines: maxLines ?? 1,
|
maxLines: maxLines ?? 1,
|
||||||
controller: controller,
|
controller: controller,
|
||||||
@ -34,6 +53,7 @@ class FormTextInput extends StatelessWidget {
|
|||||||
borderSide: BorderSide.none,
|
borderSide: BorderSide.none,
|
||||||
borderRadius: BorderRadius.circular(12)),
|
borderRadius: BorderRadius.circular(12)),
|
||||||
labelText: title,
|
labelText: title,
|
||||||
|
hintText: hint ?? '',
|
||||||
),
|
),
|
||||||
validator: (String? value) {
|
validator: (String? value) {
|
||||||
if (requiresValidation == true) {
|
if (requiresValidation == true) {
|
||||||
@ -41,9 +61,11 @@ class FormTextInput extends StatelessWidget {
|
|||||||
return 'Please enter some text';
|
return 'Please enter some text';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.length < 3) {
|
if (validations != null) validations!(value);
|
||||||
return 'Please enter a minimum of 3 characters';
|
|
||||||
}
|
// if (value.length < 3) {
|
||||||
|
// return 'Please enter a minimum of 3 characters';
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
@ -8,7 +6,6 @@ import 'package:sendtrain/daos/media_items_dao.dart';
|
|||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/helpers/widget_helpers.dart';
|
import 'package:sendtrain/helpers/widget_helpers.dart';
|
||||||
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
||||||
import 'package:video_player/video_player.dart';
|
|
||||||
|
|
||||||
class MediaCard extends StatelessWidget {
|
class MediaCard extends StatelessWidget {
|
||||||
const MediaCard(
|
const MediaCard(
|
||||||
|
@ -52,6 +52,7 @@ dependencies:
|
|||||||
video_player: ^2.9.2
|
video_player: ^2.9.2
|
||||||
dart_casing: ^3.0.1
|
dart_casing: ^3.0.1
|
||||||
collection: ^1.18.0
|
collection: ^1.18.0
|
||||||
|
flutter_sound: ^9.23.1
|
||||||
|
|
||||||
flutter_launcher_name:
|
flutter_launcher_name:
|
||||||
name: "SendTrain"
|
name: "SendTrain"
|
||||||
@ -87,6 +88,7 @@ flutter:
|
|||||||
# - images/a_dot_burr.jpeg
|
# - images/a_dot_burr.jpeg
|
||||||
# - images/a_dot_ham.jpeg
|
# - images/a_dot_ham.jpeg
|
||||||
assets:
|
assets:
|
||||||
|
- assets/audio/
|
||||||
- assets/images/
|
- assets/images/
|
||||||
- assets/exercises.json
|
- assets/exercises.json
|
||||||
|
|
||||||
|
@ -36,6 +36,8 @@ import 'schema_v30.dart' as v30;
|
|||||||
import 'schema_v31.dart' as v31;
|
import 'schema_v31.dart' as v31;
|
||||||
import 'schema_v32.dart' as v32;
|
import 'schema_v32.dart' as v32;
|
||||||
import 'schema_v33.dart' as v33;
|
import 'schema_v33.dart' as v33;
|
||||||
|
import 'schema_v34.dart' as v34;
|
||||||
|
import 'schema_v35.dart' as v35;
|
||||||
|
|
||||||
class GeneratedHelper implements SchemaInstantiationHelper {
|
class GeneratedHelper implements SchemaInstantiationHelper {
|
||||||
@override
|
@override
|
||||||
@ -107,6 +109,10 @@ class GeneratedHelper implements SchemaInstantiationHelper {
|
|||||||
return v32.DatabaseAtV32(db);
|
return v32.DatabaseAtV32(db);
|
||||||
case 33:
|
case 33:
|
||||||
return v33.DatabaseAtV33(db);
|
return v33.DatabaseAtV33(db);
|
||||||
|
case 34:
|
||||||
|
return v34.DatabaseAtV34(db);
|
||||||
|
case 35:
|
||||||
|
return v35.DatabaseAtV35(db);
|
||||||
default:
|
default:
|
||||||
throw MissingSchemaException(version, versions);
|
throw MissingSchemaException(version, versions);
|
||||||
}
|
}
|
||||||
@ -145,6 +151,8 @@ class GeneratedHelper implements SchemaInstantiationHelper {
|
|||||||
30,
|
30,
|
||||||
31,
|
31,
|
||||||
32,
|
32,
|
||||||
33
|
33,
|
||||||
|
34,
|
||||||
|
35
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
2733
test/drift/sendtrain/generated/schema_v34.dart
Normal file
2733
test/drift/sendtrain/generated/schema_v34.dart
Normal file
File diff suppressed because it is too large
Load Diff
2733
test/drift/sendtrain/generated/schema_v35.dart
Normal file
2733
test/drift/sendtrain/generated/schema_v35.dart
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user