getRangeSliderwithMark method

Widget getRangeSliderwithMark(
  1. List marks,
  2. ValueNotifier<RangeValues> rangeValues,
  3. SliderThemeData sliderThemeData,
  4. TextStyle textStyle,
  5. HMOrientation sliderOrientation,
)

Implementation

Widget getRangeSliderwithMark(
    List marks,
    ValueNotifier<RangeValues> rangeValues,
    SliderThemeData sliderThemeData,
    TextStyle textStyle,
    HMOrientation sliderOrientation) {
  final List a = marks.map((e) => e.value).toList();
  final range = useState(RangeValues(
      a.contains(rangeValues.value.start)
          ? a.indexOf(rangeValues.value.start).toDouble()
          : 0.0,
      a.contains(rangeValues.value.end)
          ? a.indexOf(rangeValues.value.end).toDouble()
          : marks.length - 1));
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      Padding(
        padding: const EdgeInsets.symmetric(horizontal: 20),
        child: SliderTheme(
          data: sliderThemeData,
          child: RangeSlider(
            values: range.value,
            max: marks.length - 1.0,
            divisions: marks.length - 1,
            labels: RangeLabels('${marks[range.value.start.toInt()].label}',
                '${marks[range.value.end.toInt()].label}'),
            onChanged: (newRanges) {
              range.value = newRanges;
            },
            onChangeEnd: (newRanges) {
              onChange([range.value.start.toInt(), range.value.end.toInt()]);
            },
          ),
        ),
      ),
      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(
                  width: 40,
                  child: Text(
                    '${e.label}',
                    textAlign: TextAlign.center,
                    style: textStyle,
                  )),
            );
          }).toList(),
        ),
      ),
    ],
  );
}