옮겨놓을데가 없어서
일단 구냥 여기다가...
//main.dart
import 'package:flutter/material.dart';
import 'package:toonflix/screens/home_screen.dart';
void main() {
runApp(const App());
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
//root widget은 materialapp / cupertinoapp 중 style 선택 필요
return MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSwatch(
backgroundColor: const Color(0XFFE7626C),
),
textTheme: const TextTheme(
displayLarge: TextStyle(
color: Color(0xFF232855),
),
),
cardColor: const Color(0xFFF4EDDB),
),
home: const HomeScreen(),
);
}
}
//home_screen.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
static const twentyFiveMins = 1500;
int totalSeconds = twentyFiveMins;
bool isRunning = false;
int totalPomo = 0;
late Timer timer;
void onTick(Timer timer) {
if (totalSeconds == 0) {
setState(() {
totalPomo = totalPomo + 1;
isRunning = false;
totalSeconds = twentyFiveMins;
});
timer.cancel();
} else {
setState(() {
//실행될 때마다 totalSeconds가 1씩 감소
totalSeconds = totalSeconds - 1;
});
}
}
void onStartPressed() {
//Duration마다 함수 실행
timer = Timer.periodic(const Duration(seconds: 1), onTick);
setState(() {
isRunning = true;
});
}
void onPausePressed() {
timer.cancel();
setState(() {
isRunning = false;
});
}
void onRestartPressed() {
timer.cancel();
setState(() {
isRunning = false;
totalSeconds = twentyFiveMins;
});
}
String format(int seconds) {
var duration = Duration(seconds: seconds);
return duration.toString().split(".").first.substring(2, 7);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
body: Column(
children: [
Flexible(
flex: 1,
child: Container(
alignment: Alignment.bottomCenter,
child: Text(
format(totalSeconds),
style: TextStyle(
color: Theme.of(context).cardColor,
fontSize: 89,
fontWeight: FontWeight.w600,
),
),
),
),
Flexible(
flex: 3,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
iconSize: 120,
color: Theme.of(context).cardColor,
onPressed: isRunning ? onPausePressed : onStartPressed,
icon: Icon(isRunning
? Icons.pause_circle_outline
: Icons.play_circle_outline),
),
IconButton(
iconSize: 30,
color: Theme.of(context).cardColor,
onPressed: onRestartPressed,
icon: const Icon(Icons.restart_alt_outlined),
)
],
),
),
Flexible(
flex: 1,
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius:
const BorderRadius.vertical(top: Radius.circular(50)),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Pomodoros',
style: TextStyle(
fontSize: 20,
color:
Theme.of(context).textTheme.displayLarge!.color,
fontWeight: FontWeight.w600,
),
),
Text(
'$totalPomo',
style: TextStyle(
fontSize: 58,
color:
Theme.of(context).textTheme.displayLarge!.color,
fontWeight: FontWeight.w600,
),
),
],
),
),
),
],
),
),
],
),
);
}
}
'공부' 카테고리의 다른 글
[Dart] 2. OOP (0) | 2024.03.20 |
---|---|
[Dart] 1. 기본 (1) | 2024.03.20 |
리덕스 기초 (0) | 2024.02.06 |
타입스크립트(TS) (3)함수, 클래스, 제네릭 (1) | 2024.01.28 |
타입스크립트(TS) (2) 인터페이스, 타입 별칭 (0) | 2024.01.28 |