chore: run dart format
Some checks are pending
Flutter CI & Release / Test (push) Waiting to run
Flutter CI & Release / Build Android APKs (push) Blocked by required conditions
Flutter CI & Release / build_linux (push) Blocked by required conditions
Flutter CI & Release / Create GitHub Release (push) Blocked by required conditions

This commit is contained in:
Dr.Blank 2026-01-10 16:51:05 +05:30
parent a520136e01
commit e23c0b6c5f
No known key found for this signature in database
GPG key ID: BA5F87FF0560C57B
84 changed files with 1565 additions and 1945 deletions

View file

@ -10,10 +10,7 @@ import 'package:vaani/settings/app_settings_provider.dart';
const double itemExtent = 25;
class SpeedSelector extends HookConsumerWidget {
const SpeedSelector({
super.key,
required this.onSpeedSelected,
});
const SpeedSelector({super.key, required this.onSpeedSelected});
final void Function(double speed) onSpeedSelected;
@ -26,34 +23,22 @@ class SpeedSelector extends HookConsumerWidget {
final speedState = useState(currentSpeed);
// hook the onSpeedSelected function to the state
useEffect(
() {
onSpeedSelected(speedState.value);
return null;
},
[speedState.value],
);
useEffect(() {
onSpeedSelected(speedState.value);
return null;
}, [speedState.value]);
// the speed options
final minSpeed = min(
speeds.reduce(min),
playerSettings.minSpeed,
);
final maxSpeed = max(
speeds.reduce(max),
playerSettings.maxSpeed,
);
final minSpeed = min(speeds.reduce(min), playerSettings.minSpeed);
final maxSpeed = max(speeds.reduce(max), playerSettings.maxSpeed);
final speedIncrement = playerSettings.speedIncrement;
final availableSpeeds = ((maxSpeed - minSpeed) / speedIncrement).ceil() + 1;
final availableSpeedsList = List.generate(
availableSpeeds,
(index) {
// need to round to 2 decimal place to avoid floating point errors
return double.parse(
(minSpeed + index * speedIncrement).toStringAsFixed(2),
);
},
);
final availableSpeedsList = List.generate(availableSpeeds, (index) {
// need to round to 2 decimal place to avoid floating point errors
return double.parse(
(minSpeed + index * speedIncrement).toStringAsFixed(2),
);
});
final scrollController = useFixedExtentScrollController(
initialItem: availableSpeedsList.indexOf(currentSpeed),
@ -107,18 +92,19 @@ class SpeedSelector extends HookConsumerWidget {
(speed) => TextButton(
style: speed == speedState.value
? TextButton.styleFrom(
backgroundColor:
Theme.of(context).colorScheme.primaryContainer,
foregroundColor: Theme.of(context)
.colorScheme
.onPrimaryContainer,
backgroundColor: Theme.of(
context,
).colorScheme.primaryContainer,
foregroundColor: Theme.of(
context,
).colorScheme.onPrimaryContainer,
)
// border if not selected
: TextButton.styleFrom(
side: BorderSide(
color: Theme.of(context)
.colorScheme
.primaryContainer,
color: Theme.of(
context,
).colorScheme.primaryContainer,
),
),
onPressed: () async {
@ -195,14 +181,13 @@ class SpeedWheel extends StatelessWidget {
controller: scrollController,
scrollDirection: Axis.horizontal,
itemExtent: itemExtent,
diameterRatio: 1.5, squeeze: 1.2,
diameterRatio: 1.5,
squeeze: 1.2,
// useMagnifier: true,
// magnification: 1.5,
physics: const FixedExtentScrollPhysics(),
children: availableSpeedsList
.map(
(speed) => SpeedLine(speed: speed),
)
.map((speed) => SpeedLine(speed: speed))
.toList(),
onSelectedItemChanged: (index) {
speedState.value = availableSpeedsList[index];
@ -232,10 +217,7 @@ class SpeedWheel extends StatelessWidget {
}
class SpeedLine extends StatelessWidget {
const SpeedLine({
super.key,
required this.speed,
});
const SpeedLine({super.key, required this.speed});
final double speed;
@ -250,8 +232,8 @@ class SpeedLine extends StatelessWidget {
width: speed % 0.5 == 0
? 3
: speed % 0.25 == 0
? 2
: 0.5,
? 2
: 0.5,
color: Theme.of(context).colorScheme.onSurface,
),
),