41 lines
996 B
Dart
41 lines
996 B
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
|
||
|
|
import 'panel_toggle_affordance.dart';
|
||
|
|
|
||
|
|
class SpeedButton extends StatelessWidget {
|
||
|
|
final double currentRate;
|
||
|
|
final bool isPanelOpen;
|
||
|
|
final VoidCallback onTogglePanel;
|
||
|
|
|
||
|
|
const SpeedButton({
|
||
|
|
super.key,
|
||
|
|
required this.currentRate,
|
||
|
|
required this.isPanelOpen,
|
||
|
|
required this.onTogglePanel,
|
||
|
|
});
|
||
|
|
|
||
|
|
static const speeds = [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0];
|
||
|
|
|
||
|
|
static String formatRate(double rate) {
|
||
|
|
return rate == rate.roundToDouble() ? '${rate.toInt()}x' : '${rate}x';
|
||
|
|
}
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
return PanelToggleAffordance(
|
||
|
|
isOpen: isPanelOpen,
|
||
|
|
onTap: onTogglePanel,
|
||
|
|
tooltip: '播放速度',
|
||
|
|
child: Text(
|
||
|
|
formatRate(currentRate),
|
||
|
|
style: const TextStyle(
|
||
|
|
color: Colors.white,
|
||
|
|
fontSize: 14,
|
||
|
|
fontWeight: FontWeight.w500,
|
||
|
|
fontFeatures: [FontFeature.tabularFigures()],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|