반응형
- 코드 작성
import 'package:flutter/material.dart';
import 'dart:async';
void main() => runApp(StopwatchApp());
class StopwatchApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Stopwatch App',
theme: ThemeData(primarySwatch: Colors.blue),
home: StopwatchHomePage(),
);
}
}
class StopwatchHomePage extends StatefulWidget {
@override
_StopwatchHomePageState createState() => _StopwatchHomePageState();
}
class _StopwatchHomePageState extends State<StopwatchHomePage> {
Stopwatch _stopwatch = Stopwatch();
Timer? _timer;
String _elapsedTime = '00:00:00';
void _startTimer() {
_stopwatch.start();
_timer = Timer.periodic(Duration(milliseconds: 100), (Timer timer) {
setState(() {
_elapsedTime = _formatTime(_stopwatch.elapsedMilliseconds);
});
});
}
void _stopTimer() {
_stopwatch.stop();
_timer?.cancel();
}
void _resetTimer() {
_stopwatch.reset();
setState(() {
_elapsedTime = '00:00:00';
});
}
String _formatTime(int milliseconds) {
int seconds = (milliseconds / 1000).truncate();
int minutes = (seconds / 60).truncate();
int hours = (minutes / 60).truncate();
String hoursStr = (hours % 60).toString().padLeft(2, '0');
String minutesStr = (minutes % 60).toString().padLeft(2, '0');
String secondsStr = (seconds % 60).toString().padLeft(2, '0');
return '$hoursStr:$minutesStr:$secondsStr';
}
@override
void dispose() {
_stopwatch.stop();
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Stopwatch')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_elapsedTime,
style: TextStyle(fontSize: 40),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
onPressed: _startTimer,
child: Text('Start'),
),
SizedBox(width: 20),
RaisedButton(
onPressed: _stopTimer,
child: Text('Stop'),
),
SizedBox(width: 20),
RaisedButton(
onPressed: _resetTimer,
child: Text('Reset'),
),
],
),
],
),
),
);
}
}
반응형