FlutterのSliderは、AndroidではSeekBar、iOSではUISliderとかSliderと呼ばれるもので
ツマミを動かすボリュームのようなものです
Slider
Sliderのツマミを持って動かすとバーが伸び縮みする挙動で
setState() を使って値が逐次更新されるようにします
1 2 3 4 5 6 7 8 9 10 11 |
double thumb = 50; ... Slider( value: _knobValue, max: 100, onChanged: (double value) { setState(() { thumb = value; }); }, ), |
Sliderとしては最低限
value, max, onChanged の設定が必要です
SizedBox の中に入れると、Sliderの横幅サイズを変更できます
1 2 3 4 5 6 |
SizedBox( width: 250, child: Slider( ... ), ), |
250 x 50 のSizedBoxに入れたので横幅が調整されました
色を変更してみます
1 2 3 4 5 6 |
child: Slider( activeColor: Colors.redAccent, inactiveColor: const Color.fromARGB(255, 244, 196, 200), thumbColor: Colors.purple, ... ), |
activeColor:Sliderの選択範囲の色
inactiveColor:未選択範囲の色
thumbColor:ツマミの色
label を追加すると、ツマミ上に数値を表示させるようにできます
そのためには、min, max, division を追加する必要があります
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Slider( ..., value: thumb, min: 0, max: 100, divisions: 20, label: thumb.round().toString(), onChanged: (double value) { setState(() { thumb = value; }); }, ), |
labelはツマミを掴んだタイミングでその上に数値を表示します
Sliderが細いので太くしてみましょう
SliderTheme を使って trackHeight から設定します
1 2 3 4 5 6 7 8 |
SliderTheme( data: SliderTheme.of(context).copyWith( trackHeight: 20.0, ), child: Slider( ... ), ), |
Sliderが太くなりました
サンプルコード
まとめて
Sliderの数値をTextで表示させてみます
main.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import 'package:flutter/material.dart'; void main() { runApp(const MainApp()); } class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: TestSlider(), ); } } class TestSlider extends StatefulWidget { const TestSlider({super.key}); @override State<TestSlider> createState() => _TestSliderState(); } class _TestSliderState extends State<TestSlider> { double thumb = 50; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Slider')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget> [ Text( '${thumb.round()}', style: const TextStyle( fontSize: 24.0, ) ), SizedBox( width: 250, child: SliderTheme( data: SliderTheme.of(context).copyWith( trackHeight: 20.0, ), child: Slider( activeColor: Colors.redAccent, inactiveColor: const Color.fromARGB(255, 244, 196, 200), thumbColor: Colors.purple, value: thumb, min: 0, max: 100, divisions: 20, label: thumb.round().toString(), onChanged: (double value) { setState(() { thumb = value; }); }, ), ), ), ], ), ), ); } } |
実行結果
実行させてみます
References;
Slider class
Slider constructor