down with daos, mild refactoring, moving to pulling from real data
This commit is contained in:
parent
54d47245ae
commit
67d7a374d4
35
lib/database/daos/activities_dao.dart
Normal file
35
lib/database/daos/activities_dao.dart
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
part 'activities_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [Activities])
|
||||||
|
class ActivitiesDao extends DatabaseAccessor<AppDatabase> with _$ActivitiesDaoMixin {
|
||||||
|
ActivitiesDao(super.db);
|
||||||
|
|
||||||
|
Future<List<Activity>> all() async {
|
||||||
|
return await select(activities).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Activity>> find(int id) async {
|
||||||
|
return await (select(activities)..where((activity) => activity.id.equals(id) )).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Activity>> sessionActivities(int id) async {
|
||||||
|
final result = select(db.sessionActivities).join(
|
||||||
|
[
|
||||||
|
innerJoin(
|
||||||
|
db.activities,
|
||||||
|
db.activities.id
|
||||||
|
.equalsExp(db.sessionActivities.activityId),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)..where(db.sessionActivities.sessionId.equals(id));
|
||||||
|
|
||||||
|
final activities = (await result.get())
|
||||||
|
.map((e) => e.readTable(db.activities))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return activities;
|
||||||
|
}
|
||||||
|
}
|
8
lib/database/daos/activities_dao.g.dart
Normal file
8
lib/database/daos/activities_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'activities_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$ActivitiesDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$ActivitiesTable get activities => attachedDatabase.activities;
|
||||||
|
}
|
37
lib/database/daos/media_items_dao.dart
Normal file
37
lib/database/daos/media_items_dao.dart
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
part 'media_items_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [MediaItems])
|
||||||
|
class MediaItemsDao extends DatabaseAccessor<AppDatabase> with _$MediaItemsDaoMixin {
|
||||||
|
MediaItemsDao(super.db);
|
||||||
|
|
||||||
|
Future<List<MediaItem>> all() async {
|
||||||
|
return await select(mediaItems).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<MediaItem>> find(int id) async {
|
||||||
|
return await (select(mediaItems)..where((mediaItem) => mediaItem.id.equals(id) )).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<MediaItem>> mediaItemsFromSession(Session session) async {
|
||||||
|
final result = select(db.objectMediaItems).join(
|
||||||
|
[
|
||||||
|
innerJoin(
|
||||||
|
db.mediaItems,
|
||||||
|
db.mediaItems.id.equalsExp(db.objectMediaItems.mediaId),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
..where(
|
||||||
|
db.objectMediaItems.objectType.equals(ObjectType.sessions.name))
|
||||||
|
..where(db.objectMediaItems.objectId.equals(session.id));
|
||||||
|
|
||||||
|
final mediaItems = (await result.get())
|
||||||
|
.map((e) => e.readTable(db.mediaItems))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return mediaItems;
|
||||||
|
}
|
||||||
|
}
|
8
lib/database/daos/media_items_dao.g.dart
Normal file
8
lib/database/daos/media_items_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'media_items_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$MediaItemsDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$MediaItemsTable get mediaItems => attachedDatabase.mediaItems;
|
||||||
|
}
|
24
lib/database/daos/session_activities_dao.dart
Normal file
24
lib/database/daos/session_activities_dao.dart
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
part 'session_activities_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [SessionActivities])
|
||||||
|
class SessionActivitiesDao extends DatabaseAccessor<AppDatabase> with _$SessionActivitiesDaoMixin {
|
||||||
|
SessionActivitiesDao(super.db);
|
||||||
|
|
||||||
|
Future<List<SessionActivity>> all() async {
|
||||||
|
return await select(sessionActivities).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<SessionActivity>> find(int id) async {
|
||||||
|
return await (select(sessionActivities)..where((sessionActivity) => sessionActivity.id.equals(id) )).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<SessionActivity>> sessionActivitiesBySessionId(int id) async {
|
||||||
|
final result = db.managers.sessionActivities
|
||||||
|
.filter((sessionActivity) => sessionActivity.sessionId.id(id));
|
||||||
|
|
||||||
|
return result.get();
|
||||||
|
}
|
||||||
|
}
|
11
lib/database/daos/session_activities_dao.g.dart
Normal file
11
lib/database/daos/session_activities_dao.g.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'session_activities_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$SessionActivitiesDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$SessionsTable get sessions => attachedDatabase.sessions;
|
||||||
|
$ActivitiesTable get activities => attachedDatabase.activities;
|
||||||
|
$SessionActivitiesTable get sessionActivities =>
|
||||||
|
attachedDatabase.sessionActivities;
|
||||||
|
}
|
17
lib/database/daos/sessions_dao.dart
Normal file
17
lib/database/daos/sessions_dao.dart
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
part 'sessions_dao.g.dart';
|
||||||
|
|
||||||
|
@DriftAccessor(tables: [Sessions])
|
||||||
|
class SessionsDao extends DatabaseAccessor<AppDatabase> with _$SessionsDaoMixin {
|
||||||
|
SessionsDao(super.db);
|
||||||
|
|
||||||
|
Future<List<Session>> all() async {
|
||||||
|
return await select(sessions).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Session>> find(int id) async {
|
||||||
|
return await (select(sessions)..where((session) => session.id.equals(id) )).get();
|
||||||
|
}
|
||||||
|
}
|
8
lib/database/daos/sessions_dao.g.dart
Normal file
8
lib/database/daos/sessions_dao.g.dart
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'sessions_dao.dart';
|
||||||
|
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
mixin _$SessionsDaoMixin on DatabaseAccessor<AppDatabase> {
|
||||||
|
$SessionsTable get sessions => attachedDatabase.sessions;
|
||||||
|
}
|
@ -1,5 +1,7 @@
|
|||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:drift_flutter/drift_flutter.dart';
|
import 'package:drift_flutter/drift_flutter.dart';
|
||||||
|
import 'package:sendtrain/database/daos/activities_dao.dart';
|
||||||
|
import 'package:sendtrain/database/daos/sessions_dao.dart';
|
||||||
|
|
||||||
part 'database.g.dart';
|
part 'database.g.dart';
|
||||||
|
|
||||||
@ -74,9 +76,15 @@ class Actions extends Table {
|
|||||||
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ObjectType {
|
||||||
|
actions,
|
||||||
|
activities,
|
||||||
|
sessions,
|
||||||
|
}
|
||||||
class ObjectMediaItems extends Table {
|
class ObjectMediaItems extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
IntColumn get objectId => integer().references(Actions, #id)();
|
IntColumn get objectId => integer()();
|
||||||
|
TextColumn get objectType => textEnum<ObjectType>()();
|
||||||
IntColumn get mediaId => integer().references(MediaItems, #id)();
|
IntColumn get mediaId => integer().references(MediaItems, #id)();
|
||||||
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
||||||
}
|
}
|
||||||
@ -89,7 +97,7 @@ class MediaItems extends Table {
|
|||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
TextColumn get title => text().withLength(min: 3, max: 32)();
|
TextColumn get title => text().withLength(min: 3, max: 32)();
|
||||||
TextColumn get description => text().named('body')();
|
TextColumn get description => text().named('body')();
|
||||||
TextColumn get reference => text().withLength(min: 3, max: 32)();
|
TextColumn get reference => text().withLength(min: 3, max: 256)();
|
||||||
TextColumn get type => textEnum<MediaType>()();
|
TextColumn get type => textEnum<MediaType>()();
|
||||||
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
DateTimeColumn get createdAt => dateTime().withDefault(Variable(DateTime.now()))();
|
||||||
}
|
}
|
||||||
@ -102,6 +110,10 @@ class MediaItems extends Table {
|
|||||||
Actions,
|
Actions,
|
||||||
ObjectMediaItems,
|
ObjectMediaItems,
|
||||||
MediaItems
|
MediaItems
|
||||||
|
], daos: [
|
||||||
|
SessionsDao,
|
||||||
|
ActivitiesDao,
|
||||||
|
MediaItems
|
||||||
])
|
])
|
||||||
|
|
||||||
class AppDatabase extends _$AppDatabase {
|
class AppDatabase extends _$AppDatabase {
|
@ -1644,7 +1644,7 @@ class $MediaItemsTable extends MediaItems
|
|||||||
late final GeneratedColumn<String> reference = GeneratedColumn<String>(
|
late final GeneratedColumn<String> reference = GeneratedColumn<String>(
|
||||||
'reference', aliasedName, false,
|
'reference', aliasedName, false,
|
||||||
additionalChecks:
|
additionalChecks:
|
||||||
GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 32),
|
GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 256),
|
||||||
type: DriftSqlType.string,
|
type: DriftSqlType.string,
|
||||||
requiredDuringInsert: true);
|
requiredDuringInsert: true);
|
||||||
static const VerificationMeta _typeMeta = const VerificationMeta('type');
|
static const VerificationMeta _typeMeta = const VerificationMeta('type');
|
||||||
@ -1975,10 +1975,15 @@ class $ObjectMediaItemsTable extends ObjectMediaItems
|
|||||||
@override
|
@override
|
||||||
late final GeneratedColumn<int> objectId = GeneratedColumn<int>(
|
late final GeneratedColumn<int> objectId = GeneratedColumn<int>(
|
||||||
'object_id', aliasedName, false,
|
'object_id', aliasedName, false,
|
||||||
type: DriftSqlType.int,
|
type: DriftSqlType.int, requiredDuringInsert: true);
|
||||||
requiredDuringInsert: true,
|
static const VerificationMeta _objectTypeMeta =
|
||||||
defaultConstraints:
|
const VerificationMeta('objectType');
|
||||||
GeneratedColumn.constraintIsAlways('REFERENCES actions (id)'));
|
@override
|
||||||
|
late final GeneratedColumnWithTypeConverter<ObjectType, String> objectType =
|
||||||
|
GeneratedColumn<String>('object_type', aliasedName, false,
|
||||||
|
type: DriftSqlType.string, requiredDuringInsert: true)
|
||||||
|
.withConverter<ObjectType>(
|
||||||
|
$ObjectMediaItemsTable.$converterobjectType);
|
||||||
static const VerificationMeta _mediaIdMeta =
|
static const VerificationMeta _mediaIdMeta =
|
||||||
const VerificationMeta('mediaId');
|
const VerificationMeta('mediaId');
|
||||||
@override
|
@override
|
||||||
@ -1997,7 +2002,8 @@ class $ObjectMediaItemsTable extends ObjectMediaItems
|
|||||||
requiredDuringInsert: false,
|
requiredDuringInsert: false,
|
||||||
defaultValue: Variable(DateTime.now()));
|
defaultValue: Variable(DateTime.now()));
|
||||||
@override
|
@override
|
||||||
List<GeneratedColumn> get $columns => [id, objectId, mediaId, createdAt];
|
List<GeneratedColumn> get $columns =>
|
||||||
|
[id, objectId, objectType, mediaId, createdAt];
|
||||||
@override
|
@override
|
||||||
String get aliasedName => _alias ?? actualTableName;
|
String get aliasedName => _alias ?? actualTableName;
|
||||||
@override
|
@override
|
||||||
@ -2017,6 +2023,7 @@ class $ObjectMediaItemsTable extends ObjectMediaItems
|
|||||||
} else if (isInserting) {
|
} else if (isInserting) {
|
||||||
context.missing(_objectIdMeta);
|
context.missing(_objectIdMeta);
|
||||||
}
|
}
|
||||||
|
context.handle(_objectTypeMeta, const VerificationResult.success());
|
||||||
if (data.containsKey('media_id')) {
|
if (data.containsKey('media_id')) {
|
||||||
context.handle(_mediaIdMeta,
|
context.handle(_mediaIdMeta,
|
||||||
mediaId.isAcceptableOrUnknown(data['media_id']!, _mediaIdMeta));
|
mediaId.isAcceptableOrUnknown(data['media_id']!, _mediaIdMeta));
|
||||||
@ -2040,6 +2047,9 @@ class $ObjectMediaItemsTable extends ObjectMediaItems
|
|||||||
.read(DriftSqlType.int, data['${effectivePrefix}id'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}id'])!,
|
||||||
objectId: attachedDatabase.typeMapping
|
objectId: attachedDatabase.typeMapping
|
||||||
.read(DriftSqlType.int, data['${effectivePrefix}object_id'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}object_id'])!,
|
||||||
|
objectType: $ObjectMediaItemsTable.$converterobjectType.fromSql(
|
||||||
|
attachedDatabase.typeMapping.read(
|
||||||
|
DriftSqlType.string, data['${effectivePrefix}object_type'])!),
|
||||||
mediaId: attachedDatabase.typeMapping
|
mediaId: attachedDatabase.typeMapping
|
||||||
.read(DriftSqlType.int, data['${effectivePrefix}media_id'])!,
|
.read(DriftSqlType.int, data['${effectivePrefix}media_id'])!,
|
||||||
createdAt: attachedDatabase.typeMapping
|
createdAt: attachedDatabase.typeMapping
|
||||||
@ -2051,16 +2061,21 @@ class $ObjectMediaItemsTable extends ObjectMediaItems
|
|||||||
$ObjectMediaItemsTable createAlias(String alias) {
|
$ObjectMediaItemsTable createAlias(String alias) {
|
||||||
return $ObjectMediaItemsTable(attachedDatabase, alias);
|
return $ObjectMediaItemsTable(attachedDatabase, alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static JsonTypeConverter2<ObjectType, String, String> $converterobjectType =
|
||||||
|
const EnumNameConverter<ObjectType>(ObjectType.values);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
||||||
final int id;
|
final int id;
|
||||||
final int objectId;
|
final int objectId;
|
||||||
|
final ObjectType objectType;
|
||||||
final int mediaId;
|
final int mediaId;
|
||||||
final DateTime createdAt;
|
final DateTime createdAt;
|
||||||
const ObjectMediaItem(
|
const ObjectMediaItem(
|
||||||
{required this.id,
|
{required this.id,
|
||||||
required this.objectId,
|
required this.objectId,
|
||||||
|
required this.objectType,
|
||||||
required this.mediaId,
|
required this.mediaId,
|
||||||
required this.createdAt});
|
required this.createdAt});
|
||||||
@override
|
@override
|
||||||
@ -2068,6 +2083,10 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
final map = <String, Expression>{};
|
final map = <String, Expression>{};
|
||||||
map['id'] = Variable<int>(id);
|
map['id'] = Variable<int>(id);
|
||||||
map['object_id'] = Variable<int>(objectId);
|
map['object_id'] = Variable<int>(objectId);
|
||||||
|
{
|
||||||
|
map['object_type'] = Variable<String>(
|
||||||
|
$ObjectMediaItemsTable.$converterobjectType.toSql(objectType));
|
||||||
|
}
|
||||||
map['media_id'] = Variable<int>(mediaId);
|
map['media_id'] = Variable<int>(mediaId);
|
||||||
map['created_at'] = Variable<DateTime>(createdAt);
|
map['created_at'] = Variable<DateTime>(createdAt);
|
||||||
return map;
|
return map;
|
||||||
@ -2077,6 +2096,7 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
return ObjectMediaItemsCompanion(
|
return ObjectMediaItemsCompanion(
|
||||||
id: Value(id),
|
id: Value(id),
|
||||||
objectId: Value(objectId),
|
objectId: Value(objectId),
|
||||||
|
objectType: Value(objectType),
|
||||||
mediaId: Value(mediaId),
|
mediaId: Value(mediaId),
|
||||||
createdAt: Value(createdAt),
|
createdAt: Value(createdAt),
|
||||||
);
|
);
|
||||||
@ -2088,6 +2108,8 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
return ObjectMediaItem(
|
return ObjectMediaItem(
|
||||||
id: serializer.fromJson<int>(json['id']),
|
id: serializer.fromJson<int>(json['id']),
|
||||||
objectId: serializer.fromJson<int>(json['objectId']),
|
objectId: serializer.fromJson<int>(json['objectId']),
|
||||||
|
objectType: $ObjectMediaItemsTable.$converterobjectType
|
||||||
|
.fromJson(serializer.fromJson<String>(json['objectType'])),
|
||||||
mediaId: serializer.fromJson<int>(json['mediaId']),
|
mediaId: serializer.fromJson<int>(json['mediaId']),
|
||||||
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
createdAt: serializer.fromJson<DateTime>(json['createdAt']),
|
||||||
);
|
);
|
||||||
@ -2098,16 +2120,23 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
return <String, dynamic>{
|
return <String, dynamic>{
|
||||||
'id': serializer.toJson<int>(id),
|
'id': serializer.toJson<int>(id),
|
||||||
'objectId': serializer.toJson<int>(objectId),
|
'objectId': serializer.toJson<int>(objectId),
|
||||||
|
'objectType': serializer.toJson<String>(
|
||||||
|
$ObjectMediaItemsTable.$converterobjectType.toJson(objectType)),
|
||||||
'mediaId': serializer.toJson<int>(mediaId),
|
'mediaId': serializer.toJson<int>(mediaId),
|
||||||
'createdAt': serializer.toJson<DateTime>(createdAt),
|
'createdAt': serializer.toJson<DateTime>(createdAt),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectMediaItem copyWith(
|
ObjectMediaItem copyWith(
|
||||||
{int? id, int? objectId, int? mediaId, DateTime? createdAt}) =>
|
{int? id,
|
||||||
|
int? objectId,
|
||||||
|
ObjectType? objectType,
|
||||||
|
int? mediaId,
|
||||||
|
DateTime? createdAt}) =>
|
||||||
ObjectMediaItem(
|
ObjectMediaItem(
|
||||||
id: id ?? this.id,
|
id: id ?? this.id,
|
||||||
objectId: objectId ?? this.objectId,
|
objectId: objectId ?? this.objectId,
|
||||||
|
objectType: objectType ?? this.objectType,
|
||||||
mediaId: mediaId ?? this.mediaId,
|
mediaId: mediaId ?? this.mediaId,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2115,6 +2144,8 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
return ObjectMediaItem(
|
return ObjectMediaItem(
|
||||||
id: data.id.present ? data.id.value : this.id,
|
id: data.id.present ? data.id.value : this.id,
|
||||||
objectId: data.objectId.present ? data.objectId.value : this.objectId,
|
objectId: data.objectId.present ? data.objectId.value : this.objectId,
|
||||||
|
objectType:
|
||||||
|
data.objectType.present ? data.objectType.value : this.objectType,
|
||||||
mediaId: data.mediaId.present ? data.mediaId.value : this.mediaId,
|
mediaId: data.mediaId.present ? data.mediaId.value : this.mediaId,
|
||||||
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2125,6 +2156,7 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
return (StringBuffer('ObjectMediaItem(')
|
return (StringBuffer('ObjectMediaItem(')
|
||||||
..write('id: $id, ')
|
..write('id: $id, ')
|
||||||
..write('objectId: $objectId, ')
|
..write('objectId: $objectId, ')
|
||||||
|
..write('objectType: $objectType, ')
|
||||||
..write('mediaId: $mediaId, ')
|
..write('mediaId: $mediaId, ')
|
||||||
..write('createdAt: $createdAt')
|
..write('createdAt: $createdAt')
|
||||||
..write(')'))
|
..write(')'))
|
||||||
@ -2132,13 +2164,14 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(id, objectId, mediaId, createdAt);
|
int get hashCode => Object.hash(id, objectId, objectType, mediaId, createdAt);
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) =>
|
bool operator ==(Object other) =>
|
||||||
identical(this, other) ||
|
identical(this, other) ||
|
||||||
(other is ObjectMediaItem &&
|
(other is ObjectMediaItem &&
|
||||||
other.id == this.id &&
|
other.id == this.id &&
|
||||||
other.objectId == this.objectId &&
|
other.objectId == this.objectId &&
|
||||||
|
other.objectType == this.objectType &&
|
||||||
other.mediaId == this.mediaId &&
|
other.mediaId == this.mediaId &&
|
||||||
other.createdAt == this.createdAt);
|
other.createdAt == this.createdAt);
|
||||||
}
|
}
|
||||||
@ -2146,30 +2179,36 @@ class ObjectMediaItem extends DataClass implements Insertable<ObjectMediaItem> {
|
|||||||
class ObjectMediaItemsCompanion extends UpdateCompanion<ObjectMediaItem> {
|
class ObjectMediaItemsCompanion extends UpdateCompanion<ObjectMediaItem> {
|
||||||
final Value<int> id;
|
final Value<int> id;
|
||||||
final Value<int> objectId;
|
final Value<int> objectId;
|
||||||
|
final Value<ObjectType> objectType;
|
||||||
final Value<int> mediaId;
|
final Value<int> mediaId;
|
||||||
final Value<DateTime> createdAt;
|
final Value<DateTime> createdAt;
|
||||||
const ObjectMediaItemsCompanion({
|
const ObjectMediaItemsCompanion({
|
||||||
this.id = const Value.absent(),
|
this.id = const Value.absent(),
|
||||||
this.objectId = const Value.absent(),
|
this.objectId = const Value.absent(),
|
||||||
|
this.objectType = const Value.absent(),
|
||||||
this.mediaId = const Value.absent(),
|
this.mediaId = const Value.absent(),
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
});
|
});
|
||||||
ObjectMediaItemsCompanion.insert({
|
ObjectMediaItemsCompanion.insert({
|
||||||
this.id = const Value.absent(),
|
this.id = const Value.absent(),
|
||||||
required int objectId,
|
required int objectId,
|
||||||
|
required ObjectType objectType,
|
||||||
required int mediaId,
|
required int mediaId,
|
||||||
this.createdAt = const Value.absent(),
|
this.createdAt = const Value.absent(),
|
||||||
}) : objectId = Value(objectId),
|
}) : objectId = Value(objectId),
|
||||||
|
objectType = Value(objectType),
|
||||||
mediaId = Value(mediaId);
|
mediaId = Value(mediaId);
|
||||||
static Insertable<ObjectMediaItem> custom({
|
static Insertable<ObjectMediaItem> custom({
|
||||||
Expression<int>? id,
|
Expression<int>? id,
|
||||||
Expression<int>? objectId,
|
Expression<int>? objectId,
|
||||||
|
Expression<String>? objectType,
|
||||||
Expression<int>? mediaId,
|
Expression<int>? mediaId,
|
||||||
Expression<DateTime>? createdAt,
|
Expression<DateTime>? createdAt,
|
||||||
}) {
|
}) {
|
||||||
return RawValuesInsertable({
|
return RawValuesInsertable({
|
||||||
if (id != null) 'id': id,
|
if (id != null) 'id': id,
|
||||||
if (objectId != null) 'object_id': objectId,
|
if (objectId != null) 'object_id': objectId,
|
||||||
|
if (objectType != null) 'object_type': objectType,
|
||||||
if (mediaId != null) 'media_id': mediaId,
|
if (mediaId != null) 'media_id': mediaId,
|
||||||
if (createdAt != null) 'created_at': createdAt,
|
if (createdAt != null) 'created_at': createdAt,
|
||||||
});
|
});
|
||||||
@ -2178,11 +2217,13 @@ class ObjectMediaItemsCompanion extends UpdateCompanion<ObjectMediaItem> {
|
|||||||
ObjectMediaItemsCompanion copyWith(
|
ObjectMediaItemsCompanion copyWith(
|
||||||
{Value<int>? id,
|
{Value<int>? id,
|
||||||
Value<int>? objectId,
|
Value<int>? objectId,
|
||||||
|
Value<ObjectType>? objectType,
|
||||||
Value<int>? mediaId,
|
Value<int>? mediaId,
|
||||||
Value<DateTime>? createdAt}) {
|
Value<DateTime>? createdAt}) {
|
||||||
return ObjectMediaItemsCompanion(
|
return ObjectMediaItemsCompanion(
|
||||||
id: id ?? this.id,
|
id: id ?? this.id,
|
||||||
objectId: objectId ?? this.objectId,
|
objectId: objectId ?? this.objectId,
|
||||||
|
objectType: objectType ?? this.objectType,
|
||||||
mediaId: mediaId ?? this.mediaId,
|
mediaId: mediaId ?? this.mediaId,
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
);
|
);
|
||||||
@ -2197,6 +2238,10 @@ class ObjectMediaItemsCompanion extends UpdateCompanion<ObjectMediaItem> {
|
|||||||
if (objectId.present) {
|
if (objectId.present) {
|
||||||
map['object_id'] = Variable<int>(objectId.value);
|
map['object_id'] = Variable<int>(objectId.value);
|
||||||
}
|
}
|
||||||
|
if (objectType.present) {
|
||||||
|
map['object_type'] = Variable<String>(
|
||||||
|
$ObjectMediaItemsTable.$converterobjectType.toSql(objectType.value));
|
||||||
|
}
|
||||||
if (mediaId.present) {
|
if (mediaId.present) {
|
||||||
map['media_id'] = Variable<int>(mediaId.value);
|
map['media_id'] = Variable<int>(mediaId.value);
|
||||||
}
|
}
|
||||||
@ -2211,6 +2256,7 @@ class ObjectMediaItemsCompanion extends UpdateCompanion<ObjectMediaItem> {
|
|||||||
return (StringBuffer('ObjectMediaItemsCompanion(')
|
return (StringBuffer('ObjectMediaItemsCompanion(')
|
||||||
..write('id: $id, ')
|
..write('id: $id, ')
|
||||||
..write('objectId: $objectId, ')
|
..write('objectId: $objectId, ')
|
||||||
|
..write('objectType: $objectType, ')
|
||||||
..write('mediaId: $mediaId, ')
|
..write('mediaId: $mediaId, ')
|
||||||
..write('createdAt: $createdAt')
|
..write('createdAt: $createdAt')
|
||||||
..write(')'))
|
..write(')'))
|
||||||
@ -2231,6 +2277,8 @@ abstract class _$AppDatabase extends GeneratedDatabase {
|
|||||||
late final $MediaItemsTable mediaItems = $MediaItemsTable(this);
|
late final $MediaItemsTable mediaItems = $MediaItemsTable(this);
|
||||||
late final $ObjectMediaItemsTable objectMediaItems =
|
late final $ObjectMediaItemsTable objectMediaItems =
|
||||||
$ObjectMediaItemsTable(this);
|
$ObjectMediaItemsTable(this);
|
||||||
|
late final SessionsDao sessionsDao = SessionsDao(this as AppDatabase);
|
||||||
|
late final ActivitiesDao activitiesDao = ActivitiesDao(this as AppDatabase);
|
||||||
@override
|
@override
|
||||||
Iterable<TableInfo<Table, Object?>> get allTables =>
|
Iterable<TableInfo<Table, Object?>> get allTables =>
|
||||||
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
|
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
|
||||||
@ -3254,23 +3302,6 @@ final class $$ActionsTableReferences
|
|||||||
return ProcessedTableManager(
|
return ProcessedTableManager(
|
||||||
manager.$state.copyWith(prefetchedData: cache));
|
manager.$state.copyWith(prefetchedData: cache));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MultiTypedResultKey<$ObjectMediaItemsTable, List<ObjectMediaItem>>
|
|
||||||
_objectMediaItemsRefsTable(_$AppDatabase db) =>
|
|
||||||
MultiTypedResultKey.fromTable(db.objectMediaItems,
|
|
||||||
aliasName: $_aliasNameGenerator(
|
|
||||||
db.actions.id, db.objectMediaItems.objectId));
|
|
||||||
|
|
||||||
$$ObjectMediaItemsTableProcessedTableManager get objectMediaItemsRefs {
|
|
||||||
final manager =
|
|
||||||
$$ObjectMediaItemsTableTableManager($_db, $_db.objectMediaItems)
|
|
||||||
.filter((f) => f.objectId.id($_item.id));
|
|
||||||
|
|
||||||
final cache =
|
|
||||||
$_typedResult.readTableOrNull(_objectMediaItemsRefsTable($_db));
|
|
||||||
return ProcessedTableManager(
|
|
||||||
manager.$state.copyWith(prefetchedData: cache));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActionsTableFilterComposer
|
class $$ActionsTableFilterComposer
|
||||||
@ -3317,27 +3348,6 @@ class $$ActionsTableFilterComposer
|
|||||||
));
|
));
|
||||||
return f(composer);
|
return f(composer);
|
||||||
}
|
}
|
||||||
|
|
||||||
Expression<bool> objectMediaItemsRefs(
|
|
||||||
Expression<bool> Function($$ObjectMediaItemsTableFilterComposer f) f) {
|
|
||||||
final $$ObjectMediaItemsTableFilterComposer composer = $composerBuilder(
|
|
||||||
composer: this,
|
|
||||||
getCurrentColumn: (t) => t.id,
|
|
||||||
referencedTable: $db.objectMediaItems,
|
|
||||||
getReferencedColumn: (t) => t.objectId,
|
|
||||||
builder: (joinBuilder,
|
|
||||||
{$addJoinBuilderToRootComposer,
|
|
||||||
$removeJoinBuilderFromRootComposer}) =>
|
|
||||||
$$ObjectMediaItemsTableFilterComposer(
|
|
||||||
$db: $db,
|
|
||||||
$table: $db.objectMediaItems,
|
|
||||||
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
|
||||||
joinBuilder: joinBuilder,
|
|
||||||
$removeJoinBuilderFromRootComposer:
|
|
||||||
$removeJoinBuilderFromRootComposer,
|
|
||||||
));
|
|
||||||
return f(composer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActionsTableOrderingComposer
|
class $$ActionsTableOrderingComposer
|
||||||
@ -3409,27 +3419,6 @@ class $$ActionsTableAnnotationComposer
|
|||||||
));
|
));
|
||||||
return f(composer);
|
return f(composer);
|
||||||
}
|
}
|
||||||
|
|
||||||
Expression<T> objectMediaItemsRefs<T extends Object>(
|
|
||||||
Expression<T> Function($$ObjectMediaItemsTableAnnotationComposer a) f) {
|
|
||||||
final $$ObjectMediaItemsTableAnnotationComposer composer = $composerBuilder(
|
|
||||||
composer: this,
|
|
||||||
getCurrentColumn: (t) => t.id,
|
|
||||||
referencedTable: $db.objectMediaItems,
|
|
||||||
getReferencedColumn: (t) => t.objectId,
|
|
||||||
builder: (joinBuilder,
|
|
||||||
{$addJoinBuilderToRootComposer,
|
|
||||||
$removeJoinBuilderFromRootComposer}) =>
|
|
||||||
$$ObjectMediaItemsTableAnnotationComposer(
|
|
||||||
$db: $db,
|
|
||||||
$table: $db.objectMediaItems,
|
|
||||||
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
|
||||||
joinBuilder: joinBuilder,
|
|
||||||
$removeJoinBuilderFromRootComposer:
|
|
||||||
$removeJoinBuilderFromRootComposer,
|
|
||||||
));
|
|
||||||
return f(composer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class $$ActionsTableTableManager extends RootTableManager<
|
class $$ActionsTableTableManager extends RootTableManager<
|
||||||
@ -3443,8 +3432,7 @@ class $$ActionsTableTableManager extends RootTableManager<
|
|||||||
$$ActionsTableUpdateCompanionBuilder,
|
$$ActionsTableUpdateCompanionBuilder,
|
||||||
(Action, $$ActionsTableReferences),
|
(Action, $$ActionsTableReferences),
|
||||||
Action,
|
Action,
|
||||||
PrefetchHooks Function(
|
PrefetchHooks Function({bool activityActionsRefs})> {
|
||||||
{bool activityActionsRefs, bool objectMediaItemsRefs})> {
|
|
||||||
$$ActionsTableTableManager(_$AppDatabase db, $ActionsTable table)
|
$$ActionsTableTableManager(_$AppDatabase db, $ActionsTable table)
|
||||||
: super(TableManagerState(
|
: super(TableManagerState(
|
||||||
db: db,
|
db: db,
|
||||||
@ -3487,13 +3475,11 @@ class $$ActionsTableTableManager extends RootTableManager<
|
|||||||
.map((e) =>
|
.map((e) =>
|
||||||
(e.readTable(table), $$ActionsTableReferences(db, table, e)))
|
(e.readTable(table), $$ActionsTableReferences(db, table, e)))
|
||||||
.toList(),
|
.toList(),
|
||||||
prefetchHooksCallback: (
|
prefetchHooksCallback: ({activityActionsRefs = false}) {
|
||||||
{activityActionsRefs = false, objectMediaItemsRefs = false}) {
|
|
||||||
return PrefetchHooks(
|
return PrefetchHooks(
|
||||||
db: db,
|
db: db,
|
||||||
explicitlyWatchedTables: [
|
explicitlyWatchedTables: [
|
||||||
if (activityActionsRefs) db.activityActions,
|
if (activityActionsRefs) db.activityActions
|
||||||
if (objectMediaItemsRefs) db.objectMediaItems
|
|
||||||
],
|
],
|
||||||
addJoins: null,
|
addJoins: null,
|
||||||
getPrefetchedDataCallback: (items) async {
|
getPrefetchedDataCallback: (items) async {
|
||||||
@ -3509,18 +3495,6 @@ class $$ActionsTableTableManager extends RootTableManager<
|
|||||||
referencedItemsForCurrentItem: (item,
|
referencedItemsForCurrentItem: (item,
|
||||||
referencedItems) =>
|
referencedItems) =>
|
||||||
referencedItems.where((e) => e.actionId == item.id),
|
referencedItems.where((e) => e.actionId == item.id),
|
||||||
typedResults: items),
|
|
||||||
if (objectMediaItemsRefs)
|
|
||||||
await $_getPrefetchedData(
|
|
||||||
currentTable: table,
|
|
||||||
referencedTable: $$ActionsTableReferences
|
|
||||||
._objectMediaItemsRefsTable(db),
|
|
||||||
managerFromTypedResult: (p0) =>
|
|
||||||
$$ActionsTableReferences(db, table, p0)
|
|
||||||
.objectMediaItemsRefs,
|
|
||||||
referencedItemsForCurrentItem: (item,
|
|
||||||
referencedItems) =>
|
|
||||||
referencedItems.where((e) => e.objectId == item.id),
|
|
||||||
typedResults: items)
|
typedResults: items)
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
@ -3540,8 +3514,7 @@ typedef $$ActionsTableProcessedTableManager = ProcessedTableManager<
|
|||||||
$$ActionsTableUpdateCompanionBuilder,
|
$$ActionsTableUpdateCompanionBuilder,
|
||||||
(Action, $$ActionsTableReferences),
|
(Action, $$ActionsTableReferences),
|
||||||
Action,
|
Action,
|
||||||
PrefetchHooks Function(
|
PrefetchHooks Function({bool activityActionsRefs})>;
|
||||||
{bool activityActionsRefs, bool objectMediaItemsRefs})>;
|
|
||||||
typedef $$ActivityActionsTableCreateCompanionBuilder = ActivityActionsCompanion
|
typedef $$ActivityActionsTableCreateCompanionBuilder = ActivityActionsCompanion
|
||||||
Function({
|
Function({
|
||||||
Value<int> id,
|
Value<int> id,
|
||||||
@ -4142,6 +4115,7 @@ typedef $$ObjectMediaItemsTableCreateCompanionBuilder
|
|||||||
= ObjectMediaItemsCompanion Function({
|
= ObjectMediaItemsCompanion Function({
|
||||||
Value<int> id,
|
Value<int> id,
|
||||||
required int objectId,
|
required int objectId,
|
||||||
|
required ObjectType objectType,
|
||||||
required int mediaId,
|
required int mediaId,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
});
|
});
|
||||||
@ -4149,6 +4123,7 @@ typedef $$ObjectMediaItemsTableUpdateCompanionBuilder
|
|||||||
= ObjectMediaItemsCompanion Function({
|
= ObjectMediaItemsCompanion Function({
|
||||||
Value<int> id,
|
Value<int> id,
|
||||||
Value<int> objectId,
|
Value<int> objectId,
|
||||||
|
Value<ObjectType> objectType,
|
||||||
Value<int> mediaId,
|
Value<int> mediaId,
|
||||||
Value<DateTime> createdAt,
|
Value<DateTime> createdAt,
|
||||||
});
|
});
|
||||||
@ -4158,19 +4133,6 @@ final class $$ObjectMediaItemsTableReferences extends BaseReferences<
|
|||||||
$$ObjectMediaItemsTableReferences(
|
$$ObjectMediaItemsTableReferences(
|
||||||
super.$_db, super.$_table, super.$_typedResult);
|
super.$_db, super.$_table, super.$_typedResult);
|
||||||
|
|
||||||
static $ActionsTable _objectIdTable(_$AppDatabase db) =>
|
|
||||||
db.actions.createAlias(
|
|
||||||
$_aliasNameGenerator(db.objectMediaItems.objectId, db.actions.id));
|
|
||||||
|
|
||||||
$$ActionsTableProcessedTableManager get objectId {
|
|
||||||
final manager = $$ActionsTableTableManager($_db, $_db.actions)
|
|
||||||
.filter((f) => f.id($_item.objectId!));
|
|
||||||
final item = $_typedResult.readTableOrNull(_objectIdTable($_db));
|
|
||||||
if (item == null) return manager;
|
|
||||||
return ProcessedTableManager(
|
|
||||||
manager.$state.copyWith(prefetchedData: [item]));
|
|
||||||
}
|
|
||||||
|
|
||||||
static $MediaItemsTable _mediaIdTable(_$AppDatabase db) =>
|
static $MediaItemsTable _mediaIdTable(_$AppDatabase db) =>
|
||||||
db.mediaItems.createAlias(
|
db.mediaItems.createAlias(
|
||||||
$_aliasNameGenerator(db.objectMediaItems.mediaId, db.mediaItems.id));
|
$_aliasNameGenerator(db.objectMediaItems.mediaId, db.mediaItems.id));
|
||||||
@ -4197,29 +4159,17 @@ class $$ObjectMediaItemsTableFilterComposer
|
|||||||
ColumnFilters<int> get id => $composableBuilder(
|
ColumnFilters<int> get id => $composableBuilder(
|
||||||
column: $table.id, builder: (column) => ColumnFilters(column));
|
column: $table.id, builder: (column) => ColumnFilters(column));
|
||||||
|
|
||||||
|
ColumnFilters<int> get objectId => $composableBuilder(
|
||||||
|
column: $table.objectId, builder: (column) => ColumnFilters(column));
|
||||||
|
|
||||||
|
ColumnWithTypeConverterFilters<ObjectType, ObjectType, String>
|
||||||
|
get objectType => $composableBuilder(
|
||||||
|
column: $table.objectType,
|
||||||
|
builder: (column) => ColumnWithTypeConverterFilters(column));
|
||||||
|
|
||||||
ColumnFilters<DateTime> get createdAt => $composableBuilder(
|
ColumnFilters<DateTime> get createdAt => $composableBuilder(
|
||||||
column: $table.createdAt, builder: (column) => ColumnFilters(column));
|
column: $table.createdAt, builder: (column) => ColumnFilters(column));
|
||||||
|
|
||||||
$$ActionsTableFilterComposer get objectId {
|
|
||||||
final $$ActionsTableFilterComposer composer = $composerBuilder(
|
|
||||||
composer: this,
|
|
||||||
getCurrentColumn: (t) => t.objectId,
|
|
||||||
referencedTable: $db.actions,
|
|
||||||
getReferencedColumn: (t) => t.id,
|
|
||||||
builder: (joinBuilder,
|
|
||||||
{$addJoinBuilderToRootComposer,
|
|
||||||
$removeJoinBuilderFromRootComposer}) =>
|
|
||||||
$$ActionsTableFilterComposer(
|
|
||||||
$db: $db,
|
|
||||||
$table: $db.actions,
|
|
||||||
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
|
||||||
joinBuilder: joinBuilder,
|
|
||||||
$removeJoinBuilderFromRootComposer:
|
|
||||||
$removeJoinBuilderFromRootComposer,
|
|
||||||
));
|
|
||||||
return composer;
|
|
||||||
}
|
|
||||||
|
|
||||||
$$MediaItemsTableFilterComposer get mediaId {
|
$$MediaItemsTableFilterComposer get mediaId {
|
||||||
final $$MediaItemsTableFilterComposer composer = $composerBuilder(
|
final $$MediaItemsTableFilterComposer composer = $composerBuilder(
|
||||||
composer: this,
|
composer: this,
|
||||||
@ -4253,29 +4203,15 @@ class $$ObjectMediaItemsTableOrderingComposer
|
|||||||
ColumnOrderings<int> get id => $composableBuilder(
|
ColumnOrderings<int> get id => $composableBuilder(
|
||||||
column: $table.id, builder: (column) => ColumnOrderings(column));
|
column: $table.id, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
|
ColumnOrderings<int> get objectId => $composableBuilder(
|
||||||
|
column: $table.objectId, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
|
ColumnOrderings<String> get objectType => $composableBuilder(
|
||||||
|
column: $table.objectType, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
|
ColumnOrderings<DateTime> get createdAt => $composableBuilder(
|
||||||
column: $table.createdAt, builder: (column) => ColumnOrderings(column));
|
column: $table.createdAt, builder: (column) => ColumnOrderings(column));
|
||||||
|
|
||||||
$$ActionsTableOrderingComposer get objectId {
|
|
||||||
final $$ActionsTableOrderingComposer composer = $composerBuilder(
|
|
||||||
composer: this,
|
|
||||||
getCurrentColumn: (t) => t.objectId,
|
|
||||||
referencedTable: $db.actions,
|
|
||||||
getReferencedColumn: (t) => t.id,
|
|
||||||
builder: (joinBuilder,
|
|
||||||
{$addJoinBuilderToRootComposer,
|
|
||||||
$removeJoinBuilderFromRootComposer}) =>
|
|
||||||
$$ActionsTableOrderingComposer(
|
|
||||||
$db: $db,
|
|
||||||
$table: $db.actions,
|
|
||||||
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
|
||||||
joinBuilder: joinBuilder,
|
|
||||||
$removeJoinBuilderFromRootComposer:
|
|
||||||
$removeJoinBuilderFromRootComposer,
|
|
||||||
));
|
|
||||||
return composer;
|
|
||||||
}
|
|
||||||
|
|
||||||
$$MediaItemsTableOrderingComposer get mediaId {
|
$$MediaItemsTableOrderingComposer get mediaId {
|
||||||
final $$MediaItemsTableOrderingComposer composer = $composerBuilder(
|
final $$MediaItemsTableOrderingComposer composer = $composerBuilder(
|
||||||
composer: this,
|
composer: this,
|
||||||
@ -4309,29 +4245,16 @@ class $$ObjectMediaItemsTableAnnotationComposer
|
|||||||
GeneratedColumn<int> get id =>
|
GeneratedColumn<int> get id =>
|
||||||
$composableBuilder(column: $table.id, builder: (column) => column);
|
$composableBuilder(column: $table.id, builder: (column) => column);
|
||||||
|
|
||||||
|
GeneratedColumn<int> get objectId =>
|
||||||
|
$composableBuilder(column: $table.objectId, builder: (column) => column);
|
||||||
|
|
||||||
|
GeneratedColumnWithTypeConverter<ObjectType, String> get objectType =>
|
||||||
|
$composableBuilder(
|
||||||
|
column: $table.objectType, builder: (column) => column);
|
||||||
|
|
||||||
GeneratedColumn<DateTime> get createdAt =>
|
GeneratedColumn<DateTime> get createdAt =>
|
||||||
$composableBuilder(column: $table.createdAt, builder: (column) => column);
|
$composableBuilder(column: $table.createdAt, builder: (column) => column);
|
||||||
|
|
||||||
$$ActionsTableAnnotationComposer get objectId {
|
|
||||||
final $$ActionsTableAnnotationComposer composer = $composerBuilder(
|
|
||||||
composer: this,
|
|
||||||
getCurrentColumn: (t) => t.objectId,
|
|
||||||
referencedTable: $db.actions,
|
|
||||||
getReferencedColumn: (t) => t.id,
|
|
||||||
builder: (joinBuilder,
|
|
||||||
{$addJoinBuilderToRootComposer,
|
|
||||||
$removeJoinBuilderFromRootComposer}) =>
|
|
||||||
$$ActionsTableAnnotationComposer(
|
|
||||||
$db: $db,
|
|
||||||
$table: $db.actions,
|
|
||||||
$addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer,
|
|
||||||
joinBuilder: joinBuilder,
|
|
||||||
$removeJoinBuilderFromRootComposer:
|
|
||||||
$removeJoinBuilderFromRootComposer,
|
|
||||||
));
|
|
||||||
return composer;
|
|
||||||
}
|
|
||||||
|
|
||||||
$$MediaItemsTableAnnotationComposer get mediaId {
|
$$MediaItemsTableAnnotationComposer get mediaId {
|
||||||
final $$MediaItemsTableAnnotationComposer composer = $composerBuilder(
|
final $$MediaItemsTableAnnotationComposer composer = $composerBuilder(
|
||||||
composer: this,
|
composer: this,
|
||||||
@ -4364,7 +4287,7 @@ class $$ObjectMediaItemsTableTableManager extends RootTableManager<
|
|||||||
$$ObjectMediaItemsTableUpdateCompanionBuilder,
|
$$ObjectMediaItemsTableUpdateCompanionBuilder,
|
||||||
(ObjectMediaItem, $$ObjectMediaItemsTableReferences),
|
(ObjectMediaItem, $$ObjectMediaItemsTableReferences),
|
||||||
ObjectMediaItem,
|
ObjectMediaItem,
|
||||||
PrefetchHooks Function({bool objectId, bool mediaId})> {
|
PrefetchHooks Function({bool mediaId})> {
|
||||||
$$ObjectMediaItemsTableTableManager(
|
$$ObjectMediaItemsTableTableManager(
|
||||||
_$AppDatabase db, $ObjectMediaItemsTable table)
|
_$AppDatabase db, $ObjectMediaItemsTable table)
|
||||||
: super(TableManagerState(
|
: super(TableManagerState(
|
||||||
@ -4379,24 +4302,28 @@ class $$ObjectMediaItemsTableTableManager extends RootTableManager<
|
|||||||
updateCompanionCallback: ({
|
updateCompanionCallback: ({
|
||||||
Value<int> id = const Value.absent(),
|
Value<int> id = const Value.absent(),
|
||||||
Value<int> objectId = const Value.absent(),
|
Value<int> objectId = const Value.absent(),
|
||||||
|
Value<ObjectType> objectType = const Value.absent(),
|
||||||
Value<int> mediaId = const Value.absent(),
|
Value<int> mediaId = const Value.absent(),
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
}) =>
|
}) =>
|
||||||
ObjectMediaItemsCompanion(
|
ObjectMediaItemsCompanion(
|
||||||
id: id,
|
id: id,
|
||||||
objectId: objectId,
|
objectId: objectId,
|
||||||
|
objectType: objectType,
|
||||||
mediaId: mediaId,
|
mediaId: mediaId,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
),
|
),
|
||||||
createCompanionCallback: ({
|
createCompanionCallback: ({
|
||||||
Value<int> id = const Value.absent(),
|
Value<int> id = const Value.absent(),
|
||||||
required int objectId,
|
required int objectId,
|
||||||
|
required ObjectType objectType,
|
||||||
required int mediaId,
|
required int mediaId,
|
||||||
Value<DateTime> createdAt = const Value.absent(),
|
Value<DateTime> createdAt = const Value.absent(),
|
||||||
}) =>
|
}) =>
|
||||||
ObjectMediaItemsCompanion.insert(
|
ObjectMediaItemsCompanion.insert(
|
||||||
id: id,
|
id: id,
|
||||||
objectId: objectId,
|
objectId: objectId,
|
||||||
|
objectType: objectType,
|
||||||
mediaId: mediaId,
|
mediaId: mediaId,
|
||||||
createdAt: createdAt,
|
createdAt: createdAt,
|
||||||
),
|
),
|
||||||
@ -4406,7 +4333,7 @@ class $$ObjectMediaItemsTableTableManager extends RootTableManager<
|
|||||||
$$ObjectMediaItemsTableReferences(db, table, e)
|
$$ObjectMediaItemsTableReferences(db, table, e)
|
||||||
))
|
))
|
||||||
.toList(),
|
.toList(),
|
||||||
prefetchHooksCallback: ({objectId = false, mediaId = false}) {
|
prefetchHooksCallback: ({mediaId = false}) {
|
||||||
return PrefetchHooks(
|
return PrefetchHooks(
|
||||||
db: db,
|
db: db,
|
||||||
explicitlyWatchedTables: [],
|
explicitlyWatchedTables: [],
|
||||||
@ -4423,16 +4350,6 @@ class $$ObjectMediaItemsTableTableManager extends RootTableManager<
|
|||||||
dynamic,
|
dynamic,
|
||||||
dynamic,
|
dynamic,
|
||||||
dynamic>>(state) {
|
dynamic>>(state) {
|
||||||
if (objectId) {
|
|
||||||
state = state.withJoin(
|
|
||||||
currentTable: table,
|
|
||||||
currentColumn: table.objectId,
|
|
||||||
referencedTable:
|
|
||||||
$$ObjectMediaItemsTableReferences._objectIdTable(db),
|
|
||||||
referencedColumn:
|
|
||||||
$$ObjectMediaItemsTableReferences._objectIdTable(db).id,
|
|
||||||
) as T;
|
|
||||||
}
|
|
||||||
if (mediaId) {
|
if (mediaId) {
|
||||||
state = state.withJoin(
|
state = state.withJoin(
|
||||||
currentTable: table,
|
currentTable: table,
|
||||||
@ -4465,7 +4382,7 @@ typedef $$ObjectMediaItemsTableProcessedTableManager = ProcessedTableManager<
|
|||||||
$$ObjectMediaItemsTableUpdateCompanionBuilder,
|
$$ObjectMediaItemsTableUpdateCompanionBuilder,
|
||||||
(ObjectMediaItem, $$ObjectMediaItemsTableReferences),
|
(ObjectMediaItem, $$ObjectMediaItemsTableReferences),
|
||||||
ObjectMediaItem,
|
ObjectMediaItem,
|
||||||
PrefetchHooks Function({bool objectId, bool mediaId})>;
|
PrefetchHooks Function({bool mediaId})>;
|
||||||
|
|
||||||
class $AppDatabaseManager {
|
class $AppDatabaseManager {
|
||||||
final _$AppDatabase _db;
|
final _$AppDatabase _db;
|
160
lib/database/seed.dart
Normal file
160
lib/database/seed.dart
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
void seedDb() {
|
||||||
|
final database = AppDatabase();
|
||||||
|
|
||||||
|
// seed data setup
|
||||||
|
final List<List> sessionValues = [
|
||||||
|
[
|
||||||
|
'Projecting @ Climbers Rock',
|
||||||
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Moonboard @ Boardroom',
|
||||||
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Off-Wall Training',
|
||||||
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Climbing Outdoors',
|
||||||
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Volume Session @ Gravity',
|
||||||
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
final List<List> mediaItems = [
|
||||||
|
[
|
||||||
|
'https://www.climbing.com/wp-content/uploads/2022/06/campus-board-e1655470701154.jpeg',
|
||||||
|
MediaType.image
|
||||||
|
],
|
||||||
|
['BgheYcxhrsw', MediaType.youtube]
|
||||||
|
];
|
||||||
|
|
||||||
|
final int totalSessions = 15;
|
||||||
|
final int totalActivities = 6;
|
||||||
|
final int totalActions = 5;
|
||||||
|
final int totalMedia = 5;
|
||||||
|
final random = Random();
|
||||||
|
|
||||||
|
// seed loop
|
||||||
|
for (int i = 0; i < totalSessions; i++) {
|
||||||
|
// session things
|
||||||
|
var status = SessionStatus.completed;
|
||||||
|
if (i == 0) status = SessionStatus.started;
|
||||||
|
if (i == 1) status = SessionStatus.pending;
|
||||||
|
|
||||||
|
final sessionValue =
|
||||||
|
sessionValues[random.nextInt(sessionValues.length)];
|
||||||
|
database
|
||||||
|
.into(database.sessions)
|
||||||
|
.insert(SessionsCompanion.insert(
|
||||||
|
title: sessionValue[0],
|
||||||
|
content: sessionValue[1],
|
||||||
|
status: status,
|
||||||
|
date: Value(DateTime.now())))
|
||||||
|
.then((sessionId) {
|
||||||
|
// activities things
|
||||||
|
for (int j = 0; j < random.nextInt(totalActivities); j++) {
|
||||||
|
database
|
||||||
|
.into(database.activities)
|
||||||
|
.insert(ActivitiesCompanion.insert(
|
||||||
|
title: "test activity $j",
|
||||||
|
type: ActivityType
|
||||||
|
.values[random.nextInt(ActivityType.values.length)],
|
||||||
|
description: "test training activity $j",
|
||||||
|
category: ActivityCategories.values[
|
||||||
|
random.nextInt(ActivityCategories.values.length)]))
|
||||||
|
.then((activityId) {
|
||||||
|
// session activity relationships
|
||||||
|
database
|
||||||
|
.into(database.sessionActivities)
|
||||||
|
.insert(SessionActivitiesCompanion.insert(
|
||||||
|
sessionId: sessionId,
|
||||||
|
activityId: activityId,
|
||||||
|
results: Value("results json, will need to test"),
|
||||||
|
achievements: Value("comma, seperated, items"),
|
||||||
|
));
|
||||||
|
|
||||||
|
// actions
|
||||||
|
for (int k = 0; k < random.nextInt(totalActions); k++) {
|
||||||
|
database
|
||||||
|
.into(database.actions)
|
||||||
|
.insert(ActionsCompanion.insert(
|
||||||
|
title: 'test action $k',
|
||||||
|
description: 'test action description $k',
|
||||||
|
set: ''))
|
||||||
|
.then((actionId) {
|
||||||
|
// add activity action association
|
||||||
|
database.into(database.activityActions).insert(
|
||||||
|
ActivityActionsCompanion.insert(
|
||||||
|
activityId: activityId, actionId: actionId));
|
||||||
|
|
||||||
|
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||||
|
final mediaItem =
|
||||||
|
mediaItems[random.nextInt(mediaItems.length)];
|
||||||
|
database
|
||||||
|
.into(database.mediaItems)
|
||||||
|
.insert(MediaItemsCompanion.insert(
|
||||||
|
title: 'media title $l',
|
||||||
|
description: 'media description $l',
|
||||||
|
reference: mediaItem[0],
|
||||||
|
type: mediaItem[1]))
|
||||||
|
.then((mediaId) {
|
||||||
|
database.into(database.objectMediaItems).insert(
|
||||||
|
ObjectMediaItemsCompanion.insert(
|
||||||
|
objectId: actionId,
|
||||||
|
mediaId: mediaId,
|
||||||
|
objectType: ObjectType.actions));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||||
|
final mediaItem = mediaItems[random.nextInt(mediaItems.length)];
|
||||||
|
database
|
||||||
|
.into(database.mediaItems)
|
||||||
|
.insert(MediaItemsCompanion.insert(
|
||||||
|
title: 'media title $l',
|
||||||
|
description: 'media description $l',
|
||||||
|
reference: mediaItem[0],
|
||||||
|
type: mediaItem[1]))
|
||||||
|
.then((mediaId) {
|
||||||
|
database.into(database.objectMediaItems).insert(
|
||||||
|
ObjectMediaItemsCompanion.insert(
|
||||||
|
objectId: activityId,
|
||||||
|
mediaId: mediaId,
|
||||||
|
objectType: ObjectType.activities));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int l = 0; l < random.nextInt(totalMedia); l++) {
|
||||||
|
final mediaItem = mediaItems[random.nextInt(mediaItems.length)];
|
||||||
|
database
|
||||||
|
.into(database.mediaItems)
|
||||||
|
.insert(MediaItemsCompanion.insert(
|
||||||
|
title: 'media title $l',
|
||||||
|
description: 'media description $l',
|
||||||
|
reference: mediaItem[0],
|
||||||
|
type: mediaItem[1]))
|
||||||
|
.then((mediaId) {
|
||||||
|
database.into(database.objectMediaItems).insert(
|
||||||
|
ObjectMediaItemsCompanion.insert(
|
||||||
|
objectId: sessionId,
|
||||||
|
mediaId: mediaId,
|
||||||
|
objectType: ObjectType.sessions));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,17 @@
|
|||||||
import 'package:drift/drift.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sendtrain/database.dart';
|
|
||||||
import 'package:sendtrain/models/activity_timer_model.dart';
|
import 'package:sendtrain/models/activity_timer_model.dart';
|
||||||
import 'package:sendtrain/screens/activities_screen.dart';
|
import 'package:sendtrain/screens/activities_screen.dart';
|
||||||
import 'package:sendtrain/screens/sessions_screen.dart';
|
import 'package:sendtrain/screens/sessions_screen.dart';
|
||||||
|
// ignore: unused_import
|
||||||
|
import 'package:sendtrain/database/seed.dart';
|
||||||
|
|
||||||
class SendTrain extends StatelessWidget {
|
class SendTrain extends StatelessWidget {
|
||||||
const SendTrain({super.key});
|
const SendTrain({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
// seedDb();
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
title: "Sendtrain",
|
title: "Sendtrain",
|
||||||
theme: ThemeData.dark(useMaterial3: true),
|
theme: ThemeData.dark(useMaterial3: true),
|
||||||
@ -92,82 +93,6 @@ class _AppState extends State<App> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
// final database = AppDatabase();
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Projecting @ Climbers Rock',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.started,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Moonboard @ Boardroom',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.pending,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Moonboard @ Boardroom',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.completed,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Projecting @ Climbers Rock',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.completed,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Off-Wall Training',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.missed,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.sessions).insert(SessionsCompanion.insert(
|
|
||||||
// title: 'Off-Wall Training',
|
|
||||||
// content: 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
|
||||||
// status: SessionStatus.completed,
|
|
||||||
// date: Value(DateTime.now())));
|
|
||||||
|
|
||||||
// database.into(database.activities).insert(ActivitiesCompanion.insert(
|
|
||||||
// title: "test activity",
|
|
||||||
// type: ActivityType.technical,
|
|
||||||
// description: "test training activity",
|
|
||||||
// category: ActivityCategories.fundamentals));
|
|
||||||
|
|
||||||
// database
|
|
||||||
// .into(database.sessionActivities)
|
|
||||||
// .insert(SessionActivitiesCompanion.insert(
|
|
||||||
// sessionId: 1,
|
|
||||||
// activityId: 1,
|
|
||||||
// results: Value("results json, will need to test"),
|
|
||||||
// achievements: Value("comma, seperated, items"),
|
|
||||||
// ));
|
|
||||||
|
|
||||||
// database.into(database.actions).insert(ActionsCompanion.insert(
|
|
||||||
// title: "test action title",
|
|
||||||
// description: "teste action description",
|
|
||||||
// set: "not sure how the json will work yet",
|
|
||||||
// ));
|
|
||||||
|
|
||||||
// database
|
|
||||||
// .into(database.activityActions)
|
|
||||||
// .insert(ActivityActionsCompanion.insert(
|
|
||||||
// activityId: 1,
|
|
||||||
// actionId: 1,
|
|
||||||
// ));
|
|
||||||
|
|
||||||
// database.into(database.mediaItems).insert(MediaItemsCompanion.insert(
|
|
||||||
// title: "test youtube media item",
|
|
||||||
// description: "this is a test youtube item",
|
|
||||||
// reference: "sZVAEy9UmoY",
|
|
||||||
// type: MediaType.youtube));
|
|
||||||
|
|
||||||
// database
|
|
||||||
// .into(database.objectMediaItems)
|
|
||||||
// .insert(ObjectMediaItemsCompanion.insert(objectId: 1, mediaId: 1));
|
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
ChangeNotifierProvider(
|
ChangeNotifierProvider(
|
||||||
create: (context) => ActivityTimerModel(),
|
create: (context) => ActivityTimerModel(),
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sendtrain/classes/activity_action.dart';
|
import 'package:sendtrain/classes/activity_action.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart' hide ActivityAction;
|
||||||
import 'package:sendtrain/models/activity_model.dart';
|
import 'package:sendtrain/models/activity_model.dart';
|
||||||
|
|
||||||
import '../widgets/activities_header.dart';
|
import '../widgets/activities_header.dart';
|
||||||
@ -13,6 +14,7 @@ class ActivitiesScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ActivitiesScreenState extends State<ActivitiesScreen> {
|
class _ActivitiesScreenState extends State<ActivitiesScreen> {
|
||||||
|
final Activity? activity = null;
|
||||||
|
|
||||||
final data = ActivityModel(
|
final data = ActivityModel(
|
||||||
id: 1,
|
id: 1,
|
||||||
@ -40,23 +42,24 @@ class _ActivitiesScreenState extends State<ActivitiesScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
List<Widget> activities = List.generate(10, (i) => ActivityCard(activity: data));
|
return Text("N/A");
|
||||||
|
// List<Widget> activities = List.generate(10, (i) => ActivityCard(activity: data, data: activity));
|
||||||
|
|
||||||
return Padding(
|
// return Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(10, 15, 10, 0),
|
// padding: const EdgeInsets.fromLTRB(10, 15, 10, 0),
|
||||||
child: Column(
|
// child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
// children: <Widget>[
|
||||||
const ActivitiesHeader(),
|
// const ActivitiesHeader(),
|
||||||
Expanded(
|
// Expanded(
|
||||||
child: GridView.count(
|
// child: GridView.count(
|
||||||
primary: false,
|
// primary: false,
|
||||||
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
|
// padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
|
||||||
crossAxisSpacing: 10,
|
// crossAxisSpacing: 10,
|
||||||
mainAxisSpacing: 10,
|
// mainAxisSpacing: 10,
|
||||||
crossAxisCount: 2,
|
// crossAxisCount: 2,
|
||||||
children: activities,
|
// children: activities,
|
||||||
))
|
// ))
|
||||||
]));
|
// ]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
import 'package:drift/drift.dart' hide Column;
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sendtrain/database.dart';
|
import 'package:sendtrain/database/daos/sessions_dao.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
import '../widgets/session_card.dart';
|
import '../widgets/session_card.dart';
|
||||||
|
|
||||||
class SessionsScreen extends StatelessWidget {
|
class SessionsScreen extends StatelessWidget {
|
||||||
final AppDatabase database = AppDatabase();
|
final AppDatabase database = AppDatabase();
|
||||||
SessionsScreen({super.key});
|
SessionsScreen({super.key});
|
||||||
|
|
||||||
Future<List<Session>> getSessions() async {
|
|
||||||
// database.managers.sessions.filter((session) => session.status(SessionStatus.pending));
|
|
||||||
return await database.managers.sessions.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return FutureBuilder<List<Session>>(
|
return FutureBuilder<List<Session>>(
|
||||||
future: getSessions(),
|
future: SessionsDao(database).all(),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
|
database.close();
|
||||||
final sessions = snapshot.data!;
|
final sessions = snapshot.data!;
|
||||||
final pending = sessions.where((session) => session.status == SessionStatus.completed || session.status == SessionStatus.missed);
|
final pending = sessions.where((session) =>
|
||||||
final upcoming = sessions.firstWhere((session) => session.status == SessionStatus.pending);
|
session.status == SessionStatus.completed ||
|
||||||
final current = sessions.firstWhere((session) => session.status == SessionStatus.started);
|
session.status == SessionStatus.missed);
|
||||||
|
final upcoming = sessions.firstWhere(
|
||||||
|
(session) => session.status == SessionStatus.pending);
|
||||||
|
final current = sessions.firstWhere(
|
||||||
|
(session) => session.status == SessionStatus.started);
|
||||||
|
|
||||||
List<Widget> previousSessions = List.generate(pending.length, (i) => SessionCard(type: 1, session: pending.elementAt(i)));
|
List<Widget> previousSessions = List.generate(pending.length,
|
||||||
Widget upcomingSession =
|
(i) => SessionCard(type: 1, session: pending.elementAt(i)));
|
||||||
SessionCard(session: upcoming);
|
Widget upcomingSession = SessionCard(session: upcoming);
|
||||||
Widget currentSession = SessionCard(session: current);
|
Widget currentSession = SessionCard(session: current);
|
||||||
|
|
||||||
database.close();
|
database.close();
|
||||||
@ -36,19 +36,22 @@ class SessionsScreen extends StatelessWidget {
|
|||||||
const Padding(
|
const Padding(
|
||||||
padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
|
padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
|
||||||
child: Text(
|
child: Text(
|
||||||
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
style: TextStyle(
|
||||||
|
fontSize: 25, fontWeight: FontWeight.bold),
|
||||||
'Current:')),
|
'Current:')),
|
||||||
currentSession,
|
currentSession,
|
||||||
const Padding(
|
const Padding(
|
||||||
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
||||||
child: Text(
|
child: Text(
|
||||||
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
style: TextStyle(
|
||||||
|
fontSize: 25, fontWeight: FontWeight.bold),
|
||||||
'Upcoming:')),
|
'Upcoming:')),
|
||||||
upcomingSession,
|
upcomingSession,
|
||||||
const Padding(
|
const Padding(
|
||||||
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
||||||
child: Text(
|
child: Text(
|
||||||
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
style: TextStyle(
|
||||||
|
fontSize: 25, fontWeight: FontWeight.bold),
|
||||||
'Previous:')),
|
'Previous:')),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
@ -66,48 +69,5 @@ class SessionsScreen extends StatelessWidget {
|
|||||||
return const CircularProgressIndicator();
|
return const CircularProgressIndicator();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// List<Widget> previousSessions = List.generate(
|
|
||||||
// 10, (i) => SessionCard(state: 1, type: 1, session: _sessions.first));
|
|
||||||
// Widget upcomingSession = SessionCard(state: 2, session: _sessions.first);
|
|
||||||
// Widget currentSession = SessionCard(session: _sessions.first);
|
|
||||||
|
|
||||||
// return Column(
|
|
||||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
// children: <Widget>[
|
|
||||||
// const Padding(
|
|
||||||
// padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
|
|
||||||
// child: Text(
|
|
||||||
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
||||||
// 'Current:')),
|
|
||||||
// currentSession,
|
|
||||||
// const Padding(
|
|
||||||
// padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
||||||
// child: Text(
|
|
||||||
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
||||||
// 'Upcoming:')),
|
|
||||||
// upcomingSession,
|
|
||||||
// const Padding(
|
|
||||||
// padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
||||||
// child: Text(
|
|
||||||
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
||||||
// 'Previous:')),
|
|
||||||
// SizedBox(
|
|
||||||
// width: double.infinity,
|
|
||||||
// height: 160,
|
|
||||||
// child: GridView.count(
|
|
||||||
// padding: const EdgeInsets.fromLTRB(15, 10, 0, 0),
|
|
||||||
// scrollDirection: Axis.horizontal,
|
|
||||||
// crossAxisSpacing: 5,
|
|
||||||
// mainAxisSpacing: 5,
|
|
||||||
// crossAxisCount: 1,
|
|
||||||
// children: previousSessions))
|
|
||||||
// // Flexible(
|
|
||||||
// // child: ListView(
|
|
||||||
// // scrollDirection: Axis.vertical,
|
|
||||||
// // children: previousSessions,
|
|
||||||
// // )),
|
|
||||||
// ],
|
|
||||||
// );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sendtrain/classes/media.dart';
|
import 'package:sendtrain/classes/media.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/models/activity_model.dart';
|
import 'package:sendtrain/models/activity_model.dart';
|
||||||
import 'package:sendtrain/models/activity_timer_model.dart';
|
import 'package:sendtrain/models/activity_timer_model.dart';
|
||||||
import 'package:sendtrain/widgets/activity_view.dart';
|
import 'package:sendtrain/widgets/activity_view.dart';
|
||||||
|
|
||||||
class ActivityCard extends StatefulWidget {
|
class ActivityCard extends StatefulWidget {
|
||||||
final ActivityModel activity;
|
final ActivityModel activity;
|
||||||
|
final Activity data;
|
||||||
|
|
||||||
const ActivityCard({super.key, required this.activity});
|
const ActivityCard({super.key, required this.activity, required this.data});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ActivityCard> createState() => ActivityCardState();
|
State<ActivityCard> createState() => ActivityCardState();
|
||||||
@ -34,28 +36,28 @@ class ActivityCardState extends State<ActivityCard> {
|
|||||||
: Theme.of(context).colorScheme.surfaceContainerLow,
|
: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => showGeneralDialog(
|
// onTap: () => showGeneralDialog(
|
||||||
barrierColor: Colors.black.withOpacity(0.5),
|
// barrierColor: Colors.black.withOpacity(0.5),
|
||||||
transitionDuration: const Duration(milliseconds: 220),
|
// transitionDuration: const Duration(milliseconds: 220),
|
||||||
transitionBuilder: (BuildContext context,
|
// transitionBuilder: (BuildContext context,
|
||||||
Animation<double> animation,
|
// Animation<double> animation,
|
||||||
Animation<double> secondaryAnimation,
|
// Animation<double> secondaryAnimation,
|
||||||
Widget child) {
|
// Widget child) {
|
||||||
Animation<Offset> custom = Tween<Offset>(
|
// Animation<Offset> custom = Tween<Offset>(
|
||||||
begin: const Offset(0.0, 1.0),
|
// begin: const Offset(0.0, 1.0),
|
||||||
end: const Offset(0.0, 0.0))
|
// end: const Offset(0.0, 0.0))
|
||||||
.animate(animation);
|
// .animate(animation);
|
||||||
return SlideTransition(
|
// return SlideTransition(
|
||||||
position: custom,
|
// position: custom,
|
||||||
child: Dialog.fullscreen(
|
// child: Dialog.fullscreen(
|
||||||
child: ActivityView(activity: widget.activity)));
|
// child: ActivityView(activity: widget.activity)));
|
||||||
},
|
// },
|
||||||
barrierDismissible: true,
|
// barrierDismissible: true,
|
||||||
barrierLabel: '',
|
// barrierLabel: '',
|
||||||
context: context,
|
// context: context,
|
||||||
pageBuilder: (context, animation1, animation2) {
|
// pageBuilder: (context, animation1, animation2) {
|
||||||
return Container();
|
// return Container();
|
||||||
}),
|
// }),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
@ -79,13 +81,13 @@ class ActivityCardState extends State<ActivityCard> {
|
|||||||
if (atm.activity?.id == widget.activity.id) {
|
if (atm.activity?.id == widget.activity.id) {
|
||||||
return Text(
|
return Text(
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
"${widget.activity.title} (${formattedTime(atm.totalTime)})");
|
"${widget.data.title} (${formattedTime(atm.totalTime)})");
|
||||||
} else {
|
} else {
|
||||||
return Text(maxLines: 1, widget.activity.title);
|
return Text(maxLines: 1, widget.data.title);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
subtitle: Text(maxLines: 2, widget.activity.description),
|
subtitle: Text(maxLines: 2, widget.data.description),
|
||||||
trailing: IconButton(
|
trailing: IconButton(
|
||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
icon: Icon(Icons.close_rounded),
|
icon: Icon(Icons.close_rounded),
|
||||||
|
@ -193,22 +193,23 @@ class ActivityViewMedia extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Widget> mediaCards =
|
return Text("media!");
|
||||||
List.generate(media.length, (i) => MediaCard(media: media[i]));
|
// List<Widget> mediaCards =
|
||||||
|
// List.generate(media.length, (i) => MediaCard(media: media[i]));
|
||||||
|
|
||||||
return Column(
|
// return Column(
|
||||||
children: [
|
// children: [
|
||||||
SizedBox(
|
// SizedBox(
|
||||||
width: double.infinity,
|
// width: double.infinity,
|
||||||
height: 100,
|
// height: 100,
|
||||||
child: GridView.count(
|
// child: GridView.count(
|
||||||
padding: const EdgeInsets.fromLTRB(15, 0, 0, 0),
|
// padding: const EdgeInsets.fromLTRB(15, 0, 0, 0),
|
||||||
scrollDirection: Axis.horizontal,
|
// scrollDirection: Axis.horizontal,
|
||||||
crossAxisSpacing: 5,
|
// crossAxisSpacing: 5,
|
||||||
mainAxisSpacing: 5,
|
// mainAxisSpacing: 5,
|
||||||
crossAxisCount: 1,
|
// crossAxisCount: 1,
|
||||||
children: mediaCards))
|
// children: mediaCards))
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sendtrain/classes/media.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
|
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
|
||||||
|
|
||||||
class MediaCard extends StatelessWidget {
|
class MediaCard extends StatelessWidget {
|
||||||
const MediaCard({super.key, required this.media});
|
const MediaCard({super.key, required this.media});
|
||||||
|
|
||||||
final Media media;
|
final MediaItem media;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -14,22 +14,22 @@ class MediaCard extends StatelessWidget {
|
|||||||
flags: const YoutubePlayerFlags(
|
flags: const YoutubePlayerFlags(
|
||||||
autoPlay: false, mute: true, showLiveFullscreenButton: false));
|
autoPlay: false, mute: true, showLiveFullscreenButton: false));
|
||||||
|
|
||||||
DecorationImage mediaImage(Media media) {
|
DecorationImage mediaImage(MediaItem media) {
|
||||||
String image = '';
|
String image = '';
|
||||||
|
|
||||||
if (media.type == "image") {
|
if (media.type == MediaType.image) {
|
||||||
image = media.reference;
|
image = media.reference;
|
||||||
} else if (media.type == "youtube") {
|
} else if (media.type == MediaType.youtube) {
|
||||||
image = 'https://img.youtube.com/vi/${media.reference}/0.jpg';
|
image = 'https://img.youtube.com/vi/${media.reference}/0.jpg';
|
||||||
}
|
}
|
||||||
|
|
||||||
return DecorationImage(image: NetworkImage(image), fit: BoxFit.cover);
|
return DecorationImage(image: NetworkImage(image), fit: BoxFit.cover);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget mediaItem(Media media) {
|
Widget mediaItem(MediaItem media) {
|
||||||
if (media.type == "image") {
|
if (media.type == MediaType.image) {
|
||||||
return Image(image: NetworkImage(media.reference));
|
return Image(image: NetworkImage(media.reference));
|
||||||
} else if (media.type == "youtube") {
|
} else if (media.type == MediaType.youtube) {
|
||||||
return YoutubePlayer(
|
return YoutubePlayer(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
aspectRatio: 16 / 9,
|
aspectRatio: 16 / 9,
|
||||||
@ -62,7 +62,7 @@ class MediaCard extends StatelessWidget {
|
|||||||
mediaItem(media),
|
mediaItem(media),
|
||||||
const SizedBox(height: 15),
|
const SizedBox(height: 15),
|
||||||
Text(
|
Text(
|
||||||
'${media.description}',
|
media.description,
|
||||||
style: const TextStyle(fontSize: 20),
|
style: const TextStyle(fontSize: 20),
|
||||||
),
|
),
|
||||||
const Divider(
|
const Divider(
|
||||||
|
@ -3,7 +3,7 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:intl/date_symbol_data_local.dart';
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
import 'package:sendtrain/classes/activity_action.dart';
|
import 'package:sendtrain/classes/activity_action.dart';
|
||||||
import 'package:sendtrain/classes/media.dart';
|
import 'package:sendtrain/classes/media.dart';
|
||||||
import 'package:sendtrain/database.dart' hide ActivityAction;
|
import 'package:sendtrain/database/database.dart' hide ActivityAction;
|
||||||
import 'package:sendtrain/models/activity_model.dart';
|
import 'package:sendtrain/models/activity_model.dart';
|
||||||
import 'package:sendtrain/models/session_model.dart';
|
import 'package:sendtrain/models/session_model.dart';
|
||||||
import 'package:sendtrain/widgets/session_view.dart';
|
import 'package:sendtrain/widgets/session_view.dart';
|
||||||
|
@ -1,165 +1,103 @@
|
|||||||
|
import 'package:drift/drift.dart' hide Column;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart';
|
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:intl/date_symbol_data_local.dart';
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
|
import 'package:sendtrain/database/daos/activities_dao.dart';
|
||||||
|
|
||||||
import 'package:sendtrain/classes/media.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/database.dart';
|
|
||||||
import 'package:sendtrain/models/activity_model.dart';
|
|
||||||
import 'package:sendtrain/models/session_model.dart';
|
import 'package:sendtrain/models/session_model.dart';
|
||||||
import 'package:sendtrain/widgets/activity_card.dart';
|
import 'package:sendtrain/widgets/session_view_achievements.dart';
|
||||||
import 'package:sendtrain/widgets/media_card.dart';
|
import 'package:sendtrain/widgets/session_view_activities.dart';
|
||||||
|
import 'package:sendtrain/widgets/session_view_media.dart';
|
||||||
|
|
||||||
class SessionView extends StatelessWidget {
|
class SessionView extends StatelessWidget {
|
||||||
const SessionView({super.key, required this.data, required this.session});
|
SessionView({super.key, required this.data, required this.session});
|
||||||
|
|
||||||
final SessionModel data;
|
final SessionModel data;
|
||||||
final Session session;
|
final Session session;
|
||||||
|
final AppDatabase database = AppDatabase();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
initializeDateFormatting('en');
|
initializeDateFormatting('en');
|
||||||
final DateFormat dateFormat = DateFormat('yyyy-MM-dd');
|
final DateFormat dateFormat = DateFormat('yyyy-MM-dd');
|
||||||
|
|
||||||
return Scaffold(
|
return FutureBuilder<List<Activity>>(
|
||||||
floatingActionButtonLocation: ExpandableFab.location,
|
future: ActivitiesDao(database).sessionActivities(session.id),
|
||||||
floatingActionButton: ExpandableFab(
|
builder: (context, snapshot) {
|
||||||
distance: 70,
|
if (snapshot.hasData) {
|
||||||
type: ExpandableFabType.up,
|
final activities = snapshot.data!;
|
||||||
overlayStyle: ExpandableFabOverlayStyle(
|
database.close();
|
||||||
color: Colors.black.withOpacity(0.5),
|
return Scaffold(
|
||||||
blur: 10,
|
floatingActionButtonLocation: ExpandableFab.location,
|
||||||
),
|
floatingActionButton: ExpandableFab(
|
||||||
children: [
|
distance: 70,
|
||||||
FloatingActionButton.extended(
|
type: ExpandableFabType.up,
|
||||||
icon: const Icon(Icons.history_outlined),
|
overlayStyle: ExpandableFabOverlayStyle(
|
||||||
label: Text('Restart'),
|
color: Colors.black.withOpacity(0.5),
|
||||||
onPressed: () {},
|
blur: 10,
|
||||||
),
|
),
|
||||||
FloatingActionButton.extended(
|
children: [
|
||||||
icon: const Icon(Icons.done_all_outlined),
|
FloatingActionButton.extended(
|
||||||
label: Text('Done'),
|
icon: const Icon(Icons.history_outlined),
|
||||||
onPressed: () {},
|
label: Text('Restart'),
|
||||||
),
|
onPressed: () {},
|
||||||
FloatingActionButton.extended(
|
),
|
||||||
icon: const Icon(Icons.edit_outlined),
|
FloatingActionButton.extended(
|
||||||
label: Text('Edit'),
|
icon: const Icon(Icons.done_all_outlined),
|
||||||
onPressed: () {},
|
label: Text('Done'),
|
||||||
),
|
onPressed: () {},
|
||||||
]),
|
),
|
||||||
body: Column(
|
FloatingActionButton.extended(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
icon: const Icon(Icons.edit_outlined),
|
||||||
children: <Widget>[
|
label: Text('Edit'),
|
||||||
AppBar(
|
onPressed: () {},
|
||||||
centerTitle: true,
|
),
|
||||||
title: Text('Session @ ${dateFormat.format(session.date as DateTime)}',
|
]),
|
||||||
style: const TextStyle(fontSize: 15)),
|
body: Column(
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
Padding(
|
children: <Widget>[
|
||||||
padding: const EdgeInsets.only(
|
AppBar(
|
||||||
left: 15, right: 20, top: 15, bottom: 10),
|
centerTitle: true,
|
||||||
child: Text(
|
title: Text(
|
||||||
maxLines: 1,
|
'Session @ ${dateFormat.format(session.date as DateTime)}',
|
||||||
style: const TextStyle(
|
style: const TextStyle(fontSize: 15)),
|
||||||
fontSize: 25, fontWeight: FontWeight.bold),
|
),
|
||||||
session.title)),
|
Padding(
|
||||||
SessionViewAchievements(achievements: data.achievements),
|
padding: const EdgeInsets.only(
|
||||||
Padding(
|
left: 15, right: 20, top: 15, bottom: 10),
|
||||||
padding: const EdgeInsets.only(left: 15, right: 15),
|
child: Text(
|
||||||
child:
|
maxLines: 1,
|
||||||
Text(style: const TextStyle(fontSize: 15), session.content)),
|
style: const TextStyle(
|
||||||
const Padding(
|
fontSize: 25, fontWeight: FontWeight.bold),
|
||||||
padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
|
session.title)),
|
||||||
child: Text(
|
SessionViewAchievements(session: session),
|
||||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
Padding(
|
||||||
'Media:')),
|
padding: const EdgeInsets.only(left: 15, right: 15),
|
||||||
SessionViewMedia(media: data.media),
|
child: Text(
|
||||||
const Padding(
|
style: const TextStyle(fontSize: 15),
|
||||||
padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
|
session.content)),
|
||||||
child: Text(
|
const Padding(
|
||||||
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
|
||||||
'Activites:')),
|
child: Text(
|
||||||
SessionViewActivities(activities: data.activities),
|
style: TextStyle(
|
||||||
],
|
fontSize: 20, fontWeight: FontWeight.bold),
|
||||||
));
|
'Media:')),
|
||||||
}
|
SessionViewMedia(session: session, media: data.media),
|
||||||
}
|
const Padding(
|
||||||
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
|
||||||
class SessionViewActivities extends StatelessWidget {
|
child: Text(
|
||||||
const SessionViewActivities({super.key, this.activities});
|
style: TextStyle(
|
||||||
|
fontSize: 20, fontWeight: FontWeight.bold),
|
||||||
final List<ActivityModel>? activities;
|
'Activites:')),
|
||||||
|
SessionViewActivities(
|
||||||
@override
|
activities: data.activities, data: activities),
|
||||||
Widget build(BuildContext context) {
|
],
|
||||||
return Expanded(
|
));
|
||||||
child: ListView.builder(
|
} else {
|
||||||
// shrinkWrap: true,
|
return const CircularProgressIndicator();
|
||||||
padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
}
|
||||||
itemCount: activities?.length,
|
});
|
||||||
itemBuilder: (BuildContext context, int index) {
|
|
||||||
return ActivityCard(activity: activities![index]);
|
|
||||||
},
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SessionViewAchievements extends StatelessWidget {
|
|
||||||
const SessionViewAchievements({super.key, this.achievements});
|
|
||||||
|
|
||||||
final List<String>? achievements;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Column(
|
|
||||||
children: [
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 10),
|
|
||||||
child: SizedBox(
|
|
||||||
height: 40,
|
|
||||||
child: ListView.builder(
|
|
||||||
scrollDirection: Axis.horizontal,
|
|
||||||
padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
||||||
itemCount: achievements?.length,
|
|
||||||
itemBuilder: (BuildContext context, int index) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(right: 5),
|
|
||||||
child: ActionChip(
|
|
||||||
visualDensity: VisualDensity.compact,
|
|
||||||
avatar: const Icon(Icons.check_circle_outline),
|
|
||||||
label: Text(maxLines: 1, '${achievements?[index]}'),
|
|
||||||
onPressed: () {},
|
|
||||||
));
|
|
||||||
},
|
|
||||||
))),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SessionViewMedia extends StatelessWidget {
|
|
||||||
const SessionViewMedia({super.key, this.media});
|
|
||||||
|
|
||||||
final List<Media>? media;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
List<Widget> mediaCards = List.generate((media != null) ? media!.length : 0,
|
|
||||||
(i) => MediaCard(media: media![i]));
|
|
||||||
|
|
||||||
return Column(
|
|
||||||
children: [
|
|
||||||
SizedBox(
|
|
||||||
width: double.infinity,
|
|
||||||
height: 100,
|
|
||||||
child: GridView.count(
|
|
||||||
padding: const EdgeInsets.fromLTRB(15, 0, 0, 0),
|
|
||||||
scrollDirection: Axis.horizontal,
|
|
||||||
crossAxisSpacing: 5,
|
|
||||||
mainAxisSpacing: 5,
|
|
||||||
crossAxisCount: 1,
|
|
||||||
children: mediaCards))
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
65
lib/widgets/session_view_achievements.dart
Normal file
65
lib/widgets/session_view_achievements.dart
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sendtrain/database/daos/session_activities_dao.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
|
||||||
|
class SessionViewAchievements extends StatelessWidget {
|
||||||
|
SessionViewAchievements({super.key, required this.session});
|
||||||
|
|
||||||
|
final Session session;
|
||||||
|
final AppDatabase database = AppDatabase();
|
||||||
|
|
||||||
|
List<String> getAchievements(List<SessionActivity> sessionActivities) {
|
||||||
|
List<String> achievements = [];
|
||||||
|
|
||||||
|
for (int i = 0; i < sessionActivities.length; i++) {
|
||||||
|
final SessionActivity sessionActivity = sessionActivities[i];
|
||||||
|
final List? saAchievments = sessionActivity.achievements?.split(',');
|
||||||
|
|
||||||
|
if (saAchievments != null) {
|
||||||
|
saAchievments.forEach((achievement) => achievements.add(achievement));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return achievements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return FutureBuilder<List<SessionActivity>>(
|
||||||
|
future: SessionActivitiesDao(database).sessionActivitiesBySessionId(session.id),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
if (snapshot.hasData) {
|
||||||
|
final sessionActivities = snapshot.data!;
|
||||||
|
final achievements = getAchievements(sessionActivities);
|
||||||
|
database.close();
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 10),
|
||||||
|
child: SizedBox(
|
||||||
|
height: 40,
|
||||||
|
child: ListView.builder(
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||||
|
itemCount: achievements.length,
|
||||||
|
itemBuilder: (BuildContext context, int index) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 5),
|
||||||
|
child: ActionChip(
|
||||||
|
visualDensity: VisualDensity.compact,
|
||||||
|
avatar:
|
||||||
|
const Icon(Icons.check_circle_outline),
|
||||||
|
label: Text(maxLines: 1, achievements[index]),
|
||||||
|
onPressed: () {},
|
||||||
|
));
|
||||||
|
},
|
||||||
|
))),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const CircularProgressIndicator();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
28
lib/widgets/session_view_activities.dart
Normal file
28
lib/widgets/session_view_activities.dart
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
import 'package:sendtrain/models/activity_model.dart';
|
||||||
|
import 'package:sendtrain/widgets/activity_card.dart';
|
||||||
|
|
||||||
|
class SessionViewActivities extends StatelessWidget {
|
||||||
|
const SessionViewActivities({super.key, this.activities, required this.data});
|
||||||
|
|
||||||
|
final List<ActivityModel>? activities;
|
||||||
|
final List<Activity> data;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
// shrinkWrap: true,
|
||||||
|
padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||||
|
itemCount: data.length,
|
||||||
|
itemBuilder: (BuildContext context, int index) {
|
||||||
|
return ActivityCard(
|
||||||
|
activity: activities![Random().nextInt(activities!.length)],
|
||||||
|
data: data[index]);
|
||||||
|
},
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
44
lib/widgets/session_view_media.dart
Normal file
44
lib/widgets/session_view_media.dart
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sendtrain/classes/media.dart';
|
||||||
|
import 'package:sendtrain/database/daos/media_items_dao.dart';
|
||||||
|
import 'package:sendtrain/database/database.dart';
|
||||||
|
import 'package:sendtrain/widgets/media_card.dart';
|
||||||
|
|
||||||
|
class SessionViewMedia extends StatelessWidget {
|
||||||
|
SessionViewMedia({super.key, this.media, required this.session});
|
||||||
|
|
||||||
|
final List<Media>? media;
|
||||||
|
final Session session;
|
||||||
|
final AppDatabase database = AppDatabase();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return FutureBuilder<List<MediaItem>>(
|
||||||
|
future: MediaItemsDao(database).mediaItemsFromSession(session),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
if (snapshot.hasData) {
|
||||||
|
final mediaItems = snapshot.data!;
|
||||||
|
database.close();
|
||||||
|
List<Widget> mediaCards = List.generate(
|
||||||
|
mediaItems.length, (i) => MediaCard(media: mediaItems[i]));
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 100,
|
||||||
|
child: GridView.count(
|
||||||
|
padding: const EdgeInsets.fromLTRB(15, 0, 0, 0),
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
crossAxisSpacing: 5,
|
||||||
|
mainAxisSpacing: 5,
|
||||||
|
crossAxisCount: 1,
|
||||||
|
children: mediaCards))
|
||||||
|
],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return CircularProgressIndicator();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user