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 Function() getChallenge; const ChallengeExercises({required this.getChallenge, Key? key}) : super(key: key); @override Widget build(BuildContext context) { return FutureBuilder( 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))); }, ), ); } }