getSliderWithMark method

Widget getSliderWithMark(
  1. List marks,
  2. ValueNotifier<int> sValue,
  3. SliderThemeData sliderThemeData,
  4. TextStyle textStyle,
  5. HMOrientation sliderOrientation,
)

Implementation

Widget getSliderWithMark(
    List marks,
    ValueNotifier<int> sValue,
    SliderThemeData sliderThemeData,
    TextStyle textStyle,
    HMOrientation sliderOrientation) {
  final List a = marks.map((e) => e.value).toList();
  final sliderVal =
      useState(a.contains(sValue.value) ? a.indexOf(sValue.value) : 0);
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        child: SliderTheme(
          data: sliderThemeData,
          child: Slider(
            max: marks.length - 1.0,
            value: sliderVal.value.toDouble(),
            divisions: marks.length - 1,
            label: '${marks[sliderVal.value].label}',
            onChanged: (value) {
              sliderVal.value = value.toInt();
            },
            onChangeEnd: (value) {
              onChange(sliderVal.value);
            },
          ),
        ),
      ),
      if (sliderOrientation == HMOrientation.vertical)
        const SizedBox(height: 6)
      else
        Container(),
      Container(
        margin: const EdgeInsets.only(left: 5, right: 5),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: marks.map((e) {
            return Transform.rotate(
              angle: sliderOrientation == HMOrientation.horizontal
                  ? 0
                  : math.pi / 2,
              child: SizedBox(
                  // color: Colors.amber,
                  width: 40,
                  child: Text(
                    '${e.label}',
                    textAlign: TextAlign.center,
                    style: textStyle,
                  )),
            );
          }).toList(),
        ),
      ),
    ],
  );
}