ModernMemoires/lib/views/first_page/widgets/drag_widget.dart

92 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import '../../../utils/circle_painter.dart';
class DragWidget extends StatefulWidget {
const DragWidget({super.key});
@override
State<DragWidget> createState() => _DragWidget();
}
class _DragWidget extends State<DragWidget> {
double _sliderValue = 0.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
fit: StackFit.expand,
children: [
Positioned.fill(
child: CustomPaint(
painter: CirclePainter(_sliderValue, Colors.red),
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 20.0, left: 20.0),
child: Text(
"${DateTime.now().toLocal()}",
style: const TextStyle(fontSize: 18),
),
),
const Padding(
padding: EdgeInsets.only(left: 20.0),
child: Text(
"How are you today?",
style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold),
),
),
const SizedBox(height: 32), // 2 line padding
SliderTheme(
data: SliderTheme.of(context).copyWith(
trackShape: CustomTrackShape(),
thumbShape: SliderComponentShape.noThumb,
),
child: Slider(
min: 0.0,
max: 100.0,
value: _sliderValue,
onChanged: (value) {
setState(() {
_sliderValue = value;
});
},
),
),
if (_sliderValue > 0)
Padding(
padding: const EdgeInsets.only(left: 20.0),
child: Text(
"${_sliderValue.toStringAsFixed(0)}%",
style: const TextStyle(fontSize: 18),
),
),
],
),
],
),
);
}
}
class CustomTrackShape extends RoundedRectSliderTrackShape {
@override
Rect getPreferredRect({
required RenderBox parentBox,
Offset offset = Offset.zero,
required SliderThemeData sliderTheme,
bool isEnabled = false,
bool isDiscrete = false,
}) {
final double trackHeight = sliderTheme.trackHeight ?? 4;
final double trackLeft = offset.dx;
final double trackTop = offset.dy + (parentBox.size.height - trackHeight) / 2;
final double trackWidth = parentBox.size.width;
return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
}
}