import 'dart:collection'; import 'package:aitrainer_app/bloc/test_set_execute/test_set_execute_bloc.dart'; import 'package:aitrainer_app/bloc/test_set_new/test_set_new_bloc.dart'; import 'package:aitrainer_app/library/custom_icon_icons.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/exercise_plan_detail.dart'; import 'package:aitrainer_app/model/exercise_type.dart'; import 'package:aitrainer_app/model/workout_menu_tree.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:aitrainer_app/widgets/app_bar.dart'; import 'package:aitrainer_app/widgets/bottom_bar_multiple_exercises.dart'; import 'package:aitrainer_app/widgets/exercise_save.dart'; import 'package:aitrainer_app/widgets/menu_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart'; // ignore: must_be_immutable class TestSetNew extends StatelessWidget with Trans { @override Widget build(BuildContext context) { final HashMap args = ModalRoute.of(context)!.settings.arguments as HashMap; final ExerciseType exerciseType = args['exerciseType']; final int exercisePlanDetailId = args['exercisePlanDetailId']; // ignore: close_sinks final TestSetExecuteBloc executeBloc = args['testSetExecuteBloc']; late TestSetNewBloc bloc; setContext(context); return Scaffold( appBar: AppBarNav(depth: 1), body: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('asset/image/WT_black_background.jpg'), fit: BoxFit.cover, alignment: Alignment.center, ), ), child: BlocProvider( create: (context) => TestSetNewBloc( exerciseRepository: ExerciseRepository(), exerciseType: exerciseType, exercisePlanDetailId: exercisePlanDetailId, executeBloc: executeBloc), child: BlocConsumer(listener: (context, state) { if (state is TestSetNewError) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(backgroundColor: Colors.orange, content: Text(state.message, style: TextStyle(color: Colors.white)))); } else if (state is TestSetNewReady) { print("Actual state: ${executeBloc.actualState(exerciseType.exerciseTypeId).toString()}"); if (executeBloc.actualState(exerciseType.exerciseTypeId).equalsTo(ExercisePlanDetailState.inProgress)) { HashMap args = HashMap(); final ExercisePlanDetail actualExercisePlanDetail = executeBloc.actualExercisePlanDetail(exerciseType.exerciseTypeId)!; args['exerciseType'] = exerciseType; args['exercisePlanDetail'] = actualExercisePlanDetail; args['testSetExecuteBloc'] = executeBloc; Navigator.of(context).pushNamed("testSetControl", arguments: args); } } }, builder: (context, state) { bloc = BlocProvider.of(context); return ModalProgressHUD( child: getExercises(bloc), inAsyncCall: state is TestSetNewLoading, opacity: 0.5, color: Colors.black54, progressIndicator: CircularProgressIndicator(), ); }), )), floatingActionButton: FloatingActionButton.extended( onPressed: () => { Navigator.of(context).pop(), bloc.add(TestSetNewSubmit()), }, backgroundColor: Colors.orange[800], icon: Icon(CustomIcon.save), label: Text( t("Done"), style: GoogleFonts.inter(fontWeight: FontWeight.bold, fontSize: 16), ), ), bottomNavigationBar: BottomBarMultipleExercises( isSet: executeBloc.miniTestSet == true, exerciseTypeId: exerciseType.exerciseTypeId, ), ); } Widget getExercises(TestSetNewBloc bloc) { WorkoutMenuTree? workoutTree = bloc.executeBloc.menuBloc.menuTreeRepository.getMenuItemByExerciseTypeId(bloc.exerciseType.exerciseTypeId); return ExerciseSave( exerciseName: bloc.exerciseType.nameTranslation, exerciseDescription: bloc.exerciseType.descriptionTranslation, unit: bloc.exerciseType.unit, unitQuantityUnit: bloc.exerciseType.unitQuantityUnit, hasUnitQuantity: bloc.exerciseType.unitQuantityUnit != null, onQuantityChanged: (value) { bloc.add(TestSetNewChangeQuantity(quantity: value)); }, onUnitQuantityChanged: (value) => bloc.add(TestSetNewChangeQuantityUnit(quantity: value)), exerciseTypeId: bloc.exerciseType.exerciseTypeId, tip: ActivityDone.exerciseSaveTestsetTip, menuImage: MenuImage( imageName: workoutTree!.imageName, workoutTreeId: workoutTree.id, radius: 0, ), /* onSubmit: () { Navigator.of(context).pop(); bloc.add(TestSetNewSubmit()); } */ ); } }