How to persist value from range slider in shared preferences?

Viewed 27

I need to persist value from range slider to shared preferences, when user leaves page with sliders, it will still save value, not without resetting to default settings (default is 1).

I am trying to make things like that:

 @override
  void initState() {
    //  _loadSlider();
    super.initState();
  }

  @override
  void dispose() {
    _debounce?.cancel();
    super.dispose();
  }

  var _currentRangeValues = const RangeValues(1, 16);

  void _loadSlider() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _currentRangeValues = (prefs.getStringList('sliderGain') ??
          [
            _currentRangeValues.start.round().toString(),
            _currentRangeValues.end.toString()
          ]) as RangeValues;
    });
  }

  // change slider value to value
  void _changeSlider(RangeValues value) {
    setState(() {
      _currentRangeValues = value;
    });
  }

  // store slider value
  void _storeSlider() async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setStringList('sliderGain', [
      _currentRangeValues.start.round().toString(),
      _currentRangeValues.end.round().toString()
    ]);
  }

But I'm getting an error

RangeValues is not subtype of type List

How to resolve this issue?

1 Answers

I found what the issue was about my slider and attempts to save data from it to sharedprefernces. So it needs to convert to List after declaring the range value variable. After that, I made small changes in the code and put data from the declared list into the get string, and after that everything worked. Thanks to the previous commenter for the tip.

void _loadSlider() async {
    final prefs = await SharedPreferences.getInstance();
    List<String> valuesString = [currentRange.start.round().toString(), currentRange.end.round().toString() ];
    setState(() {
      valuesString = (prefs.getStringList('sliderGain') ??
          [
            valuesString.toString()
          ]);
      print(valuesString);
    });
  }
Related