| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import 'package:flutter/material.dart';
- import 'package:physigo/challenge/models/challenge.dart';
- import 'package:physigo/exercises/exercises_validation/exercise_validation_page.dart';
- import 'package:physigo/exercises/exercises_validation/models/squat.dart';
- class ChallengeExercises extends StatelessWidget {
- final Future<Challenge> Function() getChallenge;
- const ChallengeExercises({required this.getChallenge, Key? key}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return FutureBuilder<Challenge>(
- future: getChallenge(),
- builder: (context, snapshot) {
- if (snapshot.connectionState == ConnectionState.waiting) {
- return const CircularProgressIndicator();
- }
- final challenge = snapshot.data!;
- return Column(
- children: challenge.exercises
- .asMap()
- .entries
- .map((e) => ExerciseTile(
- exercise: e.value,
- isBonusExercise: e.key == challenge.bonusExercise,
- ))
- .toList(),
- );
- },
- );
- }
- }
- class ExerciseTile extends StatelessWidget {
- final Exercise exercise;
- final bool isBonusExercise;
- const ExerciseTile({required this.exercise, required this.isBonusExercise, Key? key}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- return Card(
- elevation: 3,
- color: isBonusExercise ? Colors.orange : Colors.blueGrey,
- child: ListTile(
- iconColor: Colors.white,
- textColor: Colors.white,
- title: Text(
- exercise.name.toUpperCase(),
- textAlign: TextAlign.center,
- style: const TextStyle(
- fontSize: 18,
- fontWeight: FontWeight.bold,
- letterSpacing: 1.8,
- ),
- ),
- minLeadingWidth: 24,
- leading: isBonusExercise ? const Icon(Icons.star, size: 24) : const SizedBox(width: 24),
- subtitle: isBonusExercise
- ? const Text(
- "Bonus exercise, earn 2x points!",
- textAlign: TextAlign.center,
- style: TextStyle(fontSize: 16),
- )
- : null,
- trailing: const Icon(Icons.arrow_forward),
- onTap: () {
- Navigator.push(context, MaterialPageRoute(builder: (_) => ExerciseValidationPage(exercise: squat)));
- },
- ),
- );
- }
- }
|