Erdnaxela3/bioptim_gui

View on GitHub
gui/lib/widgets/penalties/maximize_minimize_radio.dart

Summary

Maintainability
Test Coverage
import 'package:bioptim_gui/models/ocp_data.dart';
import 'package:bioptim_gui/widgets/utils/extensions.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class MinMaxRadio extends StatefulWidget {
  const MinMaxRadio({
    super.key,
    required this.weightValue,
    required this.phaseIndex,
    required this.objectiveIndex,
  });

  final double weightValue;
  final int phaseIndex;
  final int objectiveIndex;

  @override
  MinMaxRadioState createState() => MinMaxRadioState();
}

class MinMaxRadioState extends State<MinMaxRadio> {
  String _selectedValue = '';

  @override
  void initState() {
    super.initState();
    _selectedValue = widget.weightValue > 0 ? "minimize" : "maximize";
  }

  @override
  Widget build(BuildContext context) {
    final List<String> values = ["maximize", "minimize"];

    return Consumer<OCPData>(builder: (context, data, child) {
      void updatePenalty(String newValue) async {
        data.updateMaximizeMinimize(
            widget.phaseIndex, widget.objectiveIndex, newValue);

        setState(() {
          _selectedValue = newValue;
        });
      }

      return Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          for (final value in values)
            Row(
              children: [
                Radio<String>(
                  value: value,
                  groupValue: _selectedValue,
                  onChanged: (newValue) {
                    updatePenalty(newValue!);
                  },
                ),
                Text(value.capitalize()),
              ],
            ),
        ],
      );
    });
  }
}