値の範囲を指定するのに便利なレンジスライダー (RangeSlider)

Flutter 1.7 から、これまでの基本的なスライダーだけではなく、RangeSlider レンジスライダーが使えるようになりました。

レンジスライダー (RangeSlider) の役割は、このスクリーンショットからたぶん直感的にわかると思います。 ひとつのスライダー内に2つのツマミが配置してあり、2つのツマミをスライドさせることで、値の範囲を指定することができます。

また、移動中に吹き出しのように設定値が表示されるようにするとか、あるいは全く表示しないとか、配色を変えるといった、カスタマイズも簡単にできるようになっています。

RangeSlidervalues プロパティに RangeValues 型のデータを渡します。 スライダーの値が変わったら onChanged イベントハンドラが呼ばれますが、このときに更新された値が渡されます。

import 'package:flutter/material.dart';

void main() => runApp(
      MaterialApp(
        home: MyApp(),
      ),
    );

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  var _start = '';
  var _end = '';
  var _rangeValues = RangeValues(40.0, 60.0);

  _updateLabels(RangeValues values) {
    _start = '${_rangeValues.start.round()}';
    _end = '${_rangeValues.end.round()}';
  }

  @override
  void initState() {
    _updateLabels(_rangeValues);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('RangeSlider Test'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SliderTheme(
              data: SliderThemeData(
                activeTrackColor: Colors.red,
                showValueIndicator: ShowValueIndicator.always,
              ),
              child: RangeSlider(
                labels: RangeLabels(_start, _end),
                values: _rangeValues,
                min: 1,
                max: 100,
                divisions: 100,
                onChanged: (values) {
                  _rangeValues = values;
                  setState(() => _updateLabels(values));
                },
              ),
            ),
            Container(
              padding: EdgeInsets.all(20),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  Text(
                    _start,
                    style: TextStyle(fontSize: 40),
                  ),
                  Text(
                    _end,
                    style: TextStyle(fontSize: 40),
                  ),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}

値を設定中に表示されるラベルは、RangeLabels です。これらは showValueIndicator プロパティを設定すると表示されるようになります。

また、上の例では設定範囲を赤色に塗っていますが、これは SliderThemeactiveTrackColor プロパティに設定した色が表示されています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Flutter 入門