Activity media

This commit is contained in:
Joshua Burman 2024-11-29 12:24:11 -05:00
parent 8890346b59
commit d7bd755c57
4 changed files with 142 additions and 80 deletions

View File

@ -1,14 +1,18 @@
import 'package:sendtrain/classes/media.dart';
class ActivityAction { class ActivityAction {
int id; int id;
String title; String title;
String description; String description;
Set activityActionSet; Set activityActionSet;
List<Media>? media;
ActivityAction({ ActivityAction({
required this.id, required this.id,
required this.title, required this.title,
required this.description, required this.description,
required this.activityActionSet, required this.activityActionSet,
this.media,
}); });
} }

View File

@ -13,40 +13,30 @@ class ActivityActionView extends StatefulWidget {
class _ActivityActionViewState extends State<ActivityActionView> { class _ActivityActionViewState extends State<ActivityActionView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Expanded(
children: [ child: ListView.builder(
Expanded( // shrinkWrap: true,
child: ListView( padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
children: <Widget>[ itemCount: widget.action.activityActionSet.total,
Text( itemBuilder: (BuildContext context, int index) {
textAlign: TextAlign.left, return Text(
style: const TextStyle(fontSize: 15), widget.action.description
widget.action.description) );
], },
), ));
),
],
);
// return Column( // return Column(
// children: [Expanded( // children: [
// child: Column( // Expanded(
// children: [ // child: ListView(
// Text( // children: <Widget>[
// textAlign: TextAlign.left, // Text(
// style: const TextStyle(fontSize: 15), // textAlign: TextAlign.left,
// widget.action.description), // style: const TextStyle(fontSize: 15),
// ] // widget.action.description)
// ],
// ),
// ), // ),
// ),
// // this will be you container
// const Column(children: [
// Text(
// textAlign: TextAlign.left,
// style: TextStyle(fontSize: 15),
// 'bottom')
// ],)
// ], // ],
// ); // );
} }
}
}

View File

@ -1,7 +1,9 @@
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/classes/media.dart';
import 'package:sendtrain/models/activity_model.dart'; import 'package:sendtrain/models/activity_model.dart';
import 'package:sendtrain/widgets/activity_action_view.dart'; import 'package:sendtrain/widgets/activity_action_view.dart';
import 'package:sendtrain/widgets/media_card.dart';
class ActivityView extends StatelessWidget { class ActivityView extends StatelessWidget {
const ActivityView({super.key, required this.activity}); const ActivityView({super.key, required this.activity});
@ -32,6 +34,7 @@ class ActivityView extends StatelessWidget {
textAlign: TextAlign.left, textAlign: TextAlign.left,
style: const TextStyle(fontSize: 15), style: const TextStyle(fontSize: 15),
activity.description)), activity.description)),
ActivityViewMedia(activity: activity),
const Padding( const Padding(
padding: EdgeInsets.fromLTRB(15, 30, 0, 10), padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
child: Text( child: Text(
@ -84,3 +87,38 @@ class ActivityViewCategories extends StatelessWidget {
); );
} }
} }
class ActivityViewMedia extends StatelessWidget {
const ActivityViewMedia({super.key, this.activity});
final ActivityModel? activity;
@override
Widget build(BuildContext context) {
List<Media> media = [];
for (ActivityAction action in activity!.actions) {
if (action.media!.isNotEmpty) {
media.addAll(action.media as Iterable<Media>);
}
}
List<Widget> mediaCards = List.generate(media.length,
(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))
],
);
}
}

View File

@ -38,22 +38,32 @@ class SessionCard extends StatelessWidget {
"Campus board session, focusing on explosiveness and contact strength.", "Campus board session, focusing on explosiveness and contact strength.",
actions: [ actions: [
ActivityAction( ActivityAction(
id: 1, id: 1,
title: 'test action', title: 'test action',
description:'test description', description: 'test description',
activityActionSet: Set( media: [
type: 'drop_set', Media(
total: 3, id: 1,
rest: 3000, reference:
reps: Reps( 'https://www.climbing.com/wp-content/uploads/2022/06/campus-board-e1655470701154.jpeg',
type: 'count', type: 'image',
tempo: [2,3,5], description: 'Campus board movement'),
amounts: [5,3,2], Media(
weights: [50,70,80], id: 1,
rest: 200 reference: '7ACyeOP-Hxo',
) type: 'youtube',
) description: 'How to campus board')
), ],
activityActionSet: Set(
type: 'drop_set',
total: 3,
rest: 3000,
reps: Reps(
type: 'count',
tempo: [2, 3, 5],
amounts: [5, 3, 2],
weights: [50, 70, 80],
rest: 200))),
], ],
resources: ['https://www.youtube.com/watch?v=bLz0xp1PEm4']), resources: ['https://www.youtube.com/watch?v=bLz0xp1PEm4']),
ActivityModel( ActivityModel(
@ -65,22 +75,32 @@ class SessionCard extends StatelessWidget {
"Session focussed on attempting a climb at or beyond your perceived limit.", "Session focussed on attempting a climb at or beyond your perceived limit.",
actions: [ actions: [
ActivityAction( ActivityAction(
id: 1, id: 1,
title: 'test action', title: 'test action',
description:'test description', description: 'test description',
activityActionSet: Set( media: [
type: 'drop_set', Media(
total: 3, id: 1,
rest: 3000, reference:
reps: Reps( 'https://www.climbing.com/wp-content/uploads/2022/07/Fixed-44.jpg',
type: 'count', type: 'image',
tempo: [2,3,5], description: 'Projecting a climb'),
amounts: [5,3,2], Media(
weights: [50,70,80], id: 1,
rest: 200 reference: 'BgheYcxhrsw',
) type: 'youtube',
) description: 'How to project climbs')
), ],
activityActionSet: Set(
type: 'drop_set',
total: 3,
rest: 3000,
reps: Reps(
type: 'count',
tempo: [2, 3, 5],
amounts: [5, 3, 2],
weights: [50, 70, 80],
rest: 200))),
], ],
resources: ['https://www.youtube.com/watch?v=dyAvbUvY_PU']), resources: ['https://www.youtube.com/watch?v=dyAvbUvY_PU']),
ActivityModel( ActivityModel(
@ -92,22 +112,32 @@ class SessionCard extends StatelessWidget {
"Weight pullups to increase strength and maximal pulling force.", "Weight pullups to increase strength and maximal pulling force.",
actions: [ actions: [
ActivityAction( ActivityAction(
id: 1, id: 1,
title: 'test action', title: 'test action',
description:'test description', description: 'test description',
activityActionSet: Set( media: [
type: 'drop_set', Media(
total: 3, id: 1,
rest: 3000, reference:
reps: Reps( 'https://trainingforclimbing.com/wp-content/uploads/2016/03/hypergravity_pull-up-compress3-966x1024.jpg',
type: 'count', type: 'image',
tempo: [2,3,5], description: 'Weighted Pullups'),
amounts: [5,3,2], Media(
weights: [50,70,80], id: 1,
rest: 200 reference: '7TLG1mHQHgw',
) type: 'youtube',
) description: 'How to do weighted pullups')
), ],
activityActionSet: Set(
type: 'drop_set',
total: 3,
rest: 3000,
reps: Reps(
type: 'count',
tempo: [2, 3, 5],
amounts: [5, 3, 2],
weights: [50, 70, 80],
rest: 200))),
], ],
resources: ['https://www.youtube.com/watch?v=dyAvbUvY_PU']), resources: ['https://www.youtube.com/watch?v=dyAvbUvY_PU']),
], ],