Flutter RangeSlider

作者: Air_w | 来源:发表于2019-07-12 11:40 被阅读442次

Flutter RangeSlider

支持:区域选择,浮动提示,最小滑动单位设置

本篇:最小值0.0,最大值100.0,滑动单位10.0,


效果图:

RangeSlider-默认 RangeSlider-设计后

代码:

核心代码;
  Widget getRangeSlider() {
    return SliderTheme(
      //样式的设计
      data: SliderThemeData(
        inactiveTickMarkColor: Colors.red,
        inactiveTrackColor: Colors.yellow,
      ),
      child: RangeSlider(
        //滑动时上方的提示标签
        labels: RangeLabels("$rangeSlideMin", "$rangeSlideMax"),
        //当前Widget滑块的值
        values: RangeValues(rangeSlideMin, rangeSlideMax),
        //最小值
        min: 0,
        //最大值
        max: 100,
        //最小滑动单位值
        divisions: 10,
        //未滑动的颜色
        inactiveColor: Colors.grey,
        //活动的颜色
        activeColor: Colors.blue,
        //滑动事件
        onChanged: (RangeValues values) {
          //滑动时更新widget的状态值
          _rangeSlideChange(values.start, values.end);
        },
      ),
    );
  }
全部代码:
  import 'package:flutter/material.dart';

  void main() => runApp(MyApp());

  class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(title: 'Flutter Demo Home Page'),
      );
    }
  }

  class MyHomePage extends StatefulWidget {
    MyHomePage({Key key, this.title}) : super(key: key);

    final String title;

    @override
    _MyHomePageState createState() => _MyHomePageState();
  }

  class _MyHomePageState extends State<MyHomePage> {
    int _counter = 0;

    double rangeSlideMin = 0;
    double rangeSlideMax = 10;

    void _incrementCounter() {
      setState(() {
        _counter++;
      });
    }

    void _rangeSlideChange(min, max) {
      setState(() {
        rangeSlideMin = min;
        rangeSlideMax = max;
      });
    }

    Widget getRangeSlider() {
      return SliderTheme(
        //样式的设计
        data: SliderThemeData(
          inactiveTickMarkColor: Colors.red,
          inactiveTrackColor: Colors.yellow,
        ),
        child: RangeSlider(
          //滑动时上方的提示标签
          labels: RangeLabels("$rangeSlideMin", "$rangeSlideMax"),
          //当前Widget滑块的值
          values: RangeValues(rangeSlideMin, rangeSlideMax),
          //最小值
          min: 0,
          //最大值
          max: 100,
          //最小滑动单位值
          divisions: 10,
          //未滑动的颜色
          inactiveColor: Colors.grey,
          //活动的颜色
          activeColor: Colors.blue,
          //滑动事件
          onChanged: (RangeValues values) {
            //滑动时更新widget的状态值
            _rangeSlideChange(values.start, values.end);
          },
        ),
      );
    }

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'You have pushed the button this many times:',
              ),
              Text(
                '$_counter',
                style: Theme.of(context).textTheme.display1,
              ),
              getRangeSlider(),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Increment',
          child: Icon(Icons.add),
        ), // This trailing comma makes auto-formatting nicer for build methods.
      );
    }
  }

未完待续。。。

相关文章

网友评论

    本文标题:Flutter RangeSlider

    本文链接:https://www.haomeiwen.com/subject/ztrekctx.html