AdjustButtonRow.dart 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/I18N.dart';
  3. class SlideAdjuster extends StatefulWidget {
  4. final String? titleString;
  5. final double? startValue;
  6. final Function(double value) onValueChange;
  7. SlideAdjuster(
  8. {this.titleString,
  9. required this.startValue,
  10. required this.onValueChange});
  11. @override
  12. _SlideAdjusterState createState() {
  13. return _SlideAdjusterState();
  14. }
  15. }
  16. class _SlideAdjusterState extends State<SlideAdjuster> {
  17. late int value;
  18. double rollValue = 0;
  19. bool onHandel = false;
  20. @override
  21. void initState() {
  22. super.initState();
  23. value = (widget.startValue! * 100).floor();
  24. }
  25. int getAddedValue() {
  26. if (rollValue > 0) {
  27. return (0.01 * rollValue * rollValue).floor();
  28. } else {
  29. return -(0.01 * rollValue * rollValue).floor();
  30. }
  31. }
  32. @override
  33. Widget build(BuildContext context) {
  34. return Column(
  35. children: <Widget>[
  36. ListTile(
  37. leading: IconButton(
  38. icon: Icon(Icons.restore),
  39. color: Theme.of(context).colorScheme.secondary,
  40. onPressed: () {
  41. value = (widget.startValue! * 100).floor();
  42. widget.onValueChange(value / 100);
  43. setState(() {});
  44. },
  45. ),
  46. title: Text(widget.titleString ?? I18N.of("调整数据")),
  47. trailing: Text("${(value + getAddedValue()) / 100}"),
  48. ),
  49. Slider(
  50. min: -150,
  51. max: 150,
  52. activeColor: Theme.of(context).colorScheme.primary,
  53. inactiveColor: Theme.of(context).colorScheme.primary,
  54. label: "${rollValue > 0 ? "+" : "-"} ${getAddedValue().abs() / 100}",
  55. value: rollValue,
  56. divisions: 200,
  57. onChangeStart: (v) {},
  58. onChanged: (v) {
  59. rollValue = v;
  60. setState(() {});
  61. },
  62. onChangeEnd: (v) {
  63. value = value + getAddedValue();
  64. widget.onValueChange(value / 100);
  65. rollValue = 0;
  66. setState(() {});
  67. },
  68. ),
  69. ],
  70. );
  71. }
  72. }