段階的または連続的に数値を設定するのに便利なスライダー

スライダー (Slider) ウィジェットは、特定の範囲から値を選択する場合に使用します。

値の範囲を指定するには、RangeSlider が適しています。

スライダーの値の型は double です。デフォルトでは最小値 min と最大値 max の間の連続な値をとります。(double で表現できる限り)

連続な値ではなく、もし飛び飛びの値を設定したい場合は、divisions プロパティを設定します。ステップ量は (max-min)/divisions になります。 例えば min が 0、max が 100 で、divisions を 5 に設定すると、 0 から 100 の範囲を 5 等分するので、(100 - 0)/5 = 20 おきの値をとります。

divisions 分割数に注意

「最小値 min = 1 、最大値 max = 5 の間で 1 毎の値を取るように設定したい場合」はどうすればよいでしょうか?つまり、1, 2, 3, 4, 5 という飛び飛びの値をとりたい場合です。 この場合、max から min までは (max - min) = 4 の幅があるので、divisions は 4 に設定する必要があります。

ここでは次の画面のように 0 から 100 まで、20 おきの値を取るようなスライダーを作りましょう。

コードは次の通りです。

import 'package:flutter/material.dart';

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

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

class _State extends State<MyApp> {
  var _sliderValue = 0.0;
  var _labelText = 'Select value';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Slider'),
      ),
      body: Container(
        padding: EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            Text(
              _labelText,
              style: TextStyle(fontSize: 24),
            ),
            Slider(
              value: _sliderValue,
              min: 0,
              max: 100,
              divisions: 5,
              onChanged: (double value) {
                setState(() {
                  _sliderValue = value.roundToDouble();
                  _labelText = 'value = $_sliderValue';
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

スライダーの値に変更があった時に、変更後の値が渡されて onChanged ハンドラがコールバックされます。

ここでは onChanged ハンドラにて、roundToDouble() メソッドで、 念のため数字を丸めてから値を取り置き、表示のラベルを更新しています。

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

© 2024 Flutter 入門