| // Copyright 2014 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'dart:ui'; | |
| import 'package:flutter/material.dart'; | |
| class SlidersPage extends StatefulWidget { | |
| const SlidersPage({super.key}); | |
| @override | |
| State<SlidersPage> createState() => _SlidersPageState(); | |
| } | |
| class _SlidersPageState extends State<SlidersPage> with TickerProviderStateMixin { | |
| late AnimationController _sliderController; | |
| late Animation<double> _sliderAnimation; | |
| double _sliderValue = 0.0; | |
| RangeValues _rangeSliderValues = const RangeValues(0.0, 1.0); | |
| @override | |
| void initState() { | |
| super.initState(); | |
| _sliderController = AnimationController(duration: const Duration(seconds: 1), vsync: this) | |
| ..repeat(); | |
| _sliderAnimation = Tween<double>(begin: 0, end: 1).animate(_sliderController) | |
| ..addListener(() { | |
| setState(() { | |
| _sliderValue = _sliderAnimation.value; | |
| _rangeSliderValues = RangeValues( | |
| clampDouble(_sliderAnimation.value, 0, 0.45), | |
| 1.0 - clampDouble(_sliderAnimation.value, 0, 0.45), | |
| ); | |
| }); | |
| }); | |
| } | |
| @override | |
| void dispose() { | |
| _sliderController.dispose(); | |
| super.dispose(); | |
| } | |
| @override | |
| Widget build(BuildContext context) { | |
| return Material( | |
| child: Column( | |
| mainAxisAlignment: MainAxisAlignment.center, | |
| children: <Widget>[ | |
| Slider(value: _sliderValue, onChanged: (double value) {}), | |
| RangeSlider(values: _rangeSliderValues, onChanged: (RangeValues values) {}), | |
| ], | |
| ), | |
| ); | |
| } | |
| } |