class CountdownScreen extends StatefulWidget {
@override
_CountdownScreenState createState() => _CountdownScreenState();
}
class _CountdownScreenState extends State<CountdownScreen> {
int _remainingSeconds = 0; // 剩余时间(秒)
Timer? _timer; // 定时器
bool _isRunning = false; // 计时器运行状态
int _selectedTimeValue = 0; // 选择的时间值(秒)
late DateTime _currentTime; // 当前时间
int secondsConversion = 0; // 秒转换值
TextEditingController textEditingController = TextEditingController();
@override
void initState() {
super.initState();
_currentTime = DateTime.now();
_startClock();
}
// 递归方式实现实时显示当前时间
void _startClock() {
Future.delayed(Duration(seconds: 1), () {
setState(() {
_currentTime = DateTime.now();
});
_startClock();
});
}
// 弹出选择时间的对话框
Future<void> _showTimeValueDialog() async {
int? selectedTimeInSeconds = await showDialog<int>(
context: context,
builder: (BuildContext context) {
int hours = 0;
int minutes = 0;
int seconds = 0;
return AlertDialog(
title: Text('选择时间值'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextField(
controller: textEditingController,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(
width: 50,
child: TextField(
keyboardType: TextInputType.number,
onChanged: (value) {
hours = int.tryParse(value) ?? 0;
},
),
),
Text("时"),
SizedBox(
width: 50,
child: TextField(
keyboardType: TextInputType.number,
onChanged: (value) {
minutes = int.tryParse(value) ?? 0;
},
),
),
Text("分"),
SizedBox(
width: 50,
child: TextField(
keyboardType: TextInputType.number,
onChanged: (value) {
seconds = int.tryParse(value) ?? 0;
},
),
),
Text("秒")
],
),
ElevatedButton(
onPressed: () {
Navigator.pop(
context,
hours * 3600 + minutes * 60 + seconds,
);
},
child: Text('开始'),
),
],
),
);
},
);
if (selectedTimeInSeconds != null) {
setState(() {
_selectedTimeValue = selectedTimeInSeconds;
_remainingSeconds = selectedTimeInSeconds;
});
}
}
// 开始计时器
void startTimer() {
if (_timer != null) {
_timer!.cancel();
}
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
if (_remainingSeconds > 0) {
_remainingSeconds--;
} else {
_timer!.cancel();
_isRunning = false;
}
});
});
}
// 开始/暂停计时器
void toggleTimer() {
if (_isRunning) {
_timer!.cancel();
} else {
startTimer();
}
setState(() {
_isRunning = !_isRunning;
});
}
// 停止计时器
void stopTimer() {
_timer!.cancel();
setState(() {
_remainingSeconds = 0;
_isRunning = false;
});
}
@override
void dispose() {
_timer!.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'倒计时: ${_remainingSeconds ~/ 3600}时${(_remainingSeconds % 3600) ~/ 60}分${_remainingSeconds % 60}秒',
style: TextStyle(fontSize: 24),
),
Text(textEditingController.text),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: toggleTimer,
child: Text(_isRunning ? '暂停' : '开始'),
),
SizedBox(width: 20),
ElevatedButton(onPressed: stopTimer, child: Text("清空"))
],
),
ElevatedButton(onPressed: _showTimeValueDialog, child: Text("选择时间"))
],
),
);
}
}