import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; class PageParameters extends StatelessWidget { const PageParameters({ super.key, required this.config, required this.canBeResumed, }); final ApplicationConfigDefinition config; final bool canBeResumed; final double separatorHeight = 8.0; @override Widget build(BuildContext context) { final List<Widget> lines = []; // Activity settings (top) for (ApplicationSettingsParameter parameter in config.activitySettings) { if (parameter.displayedOnTop) { lines.add(Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: buildParametersLine( parameter: parameter, isEnabled: !canBeResumed, ), )); lines.add(SizedBox(height: separatorHeight)); } } lines.add(Expanded( child: SizedBox(height: separatorHeight), )); if (canBeResumed) { // Resume activity lines.add(AspectRatio( aspectRatio: 3, child: ActivityButtonResumeSaved( onPressed: () { config.resumeActivity(context); }, ), )); // Delete saved activity lines.add(SizedBox.square( dimension: MediaQuery.of(context).size.width / 5, child: ActivityButtonDeleteSaved( onPressed: () { config.deleteCurrentActivity(context); }, ), )); } else { // Start new activity lines.add( AspectRatio( aspectRatio: 3, child: ActivityButtonStartNew( onPressed: () { config.startNewActivity(context); }, ), ), ); } lines.add(SizedBox(height: separatorHeight)); // Activity settings (bottom) for (ApplicationSettingsParameter parameter in config.activitySettings) { if (!parameter.displayedOnTop) { lines.add(Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: buildParametersLine( parameter: parameter, isEnabled: !canBeResumed, ), )); lines.add(SizedBox(height: separatorHeight)); } } return Column( children: lines, ); } List<Widget> buildParametersLine({ required ApplicationSettingsParameter parameter, required bool isEnabled, }) { final List<ApplicationSettingsParameterItemValue> items = parameter.values; final List<Widget> parameterButtons = []; if (items.length <= 1) { return []; } for (ApplicationSettingsParameterItemValue item in items) { final Widget parameterButton = BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>( builder: (BuildContext context, ActivitySettingsState activitySettingsState) { final ActivitySettingsCubit activitySettingsCubit = BlocProvider.of<ActivitySettingsCubit>(context); final double displayWidth = MediaQuery.of(context).size.width; final double itemWidth = displayWidth / items.length - 4; return SizedBox.square( dimension: itemWidth, child: parameter.buildParameterItem( context: context, parameter: parameter, itemValue: item, size: itemWidth, onPressed: isEnabled ? () { activitySettingsCubit.set(parameter.code, item.value); } : null, ), ); }, ); parameterButtons.add(parameterButton); } return parameterButtons; } }