스마트시대
2-3.Userinterface, timer(start and pause) and data format 본문
Programing/Flutter
2-3.Userinterface, timer(start and pause) and data format
스마트시대 2023. 3. 31. 17:12728x90
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) {
return MaterialApp(
theme: ThemeData(
textTheme: const TextTheme(
displayLarge: TextStyle(
color: Color(0xFF232B55),
),
),
cardColor: const Color(0xFFF4EDDB),
),
home: const HomeScreen(),
);
}
}
import 'package:flutter/material.dart';
import 'dart:async';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
static const twentyFiveMinutes = 1500;
int totalSeconds = twentyFiveMinutes;
bool isRunning = false;
int totalPomodoros = 0;
late Timer timer;
void onTick(Timer timer) {
if (totalSeconds == 0) {
setState(() {
totalPomodoros = totalPomodoros + 1;
isRunning = false;
totalSeconds = twentyFiveMinutes;
});
timer.cancel();
} else {}
setState(() {
totalSeconds = totalSeconds - 1;
});
}
void onStartPressed() {
timer = Timer.periodic(const Duration(seconds: 1), onTick);
setState(() {
isRunning = true;
});
}
void onPausePressed() {
timer.cancel();
setState(() {
isRunning = false;
});
}
String format(int seconds) {
var duration = Duration(seconds: seconds);
print(duration.toString());
print(duration.toString().split('.'));
print(duration.toString().split('.').first);
print(duration.toString().split('.').first.substring(2, 7));
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, // ratio of box size
child: Container(
alignment: Alignment.bottomCenter,
child: Text(
format(totalSeconds),
style: TextStyle(
color: Theme.of(context).cardColor,
fontSize: 90,
fontWeight: FontWeight.w600),
),
),
),
Flexible(
flex: 3,
child: Center(
child: IconButton(
iconSize: 120,
color: Theme.of(context).cardColor,
onPressed: isRunning ? onPausePressed : onStartPressed,
icon: Icon(
isRunning
? Icons.pause_circle_outline
: Icons.play_circle_outline,
),
),
),
),
Flexible(
flex: 1,
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(50),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Pomodors',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color:
Theme.of(context).textTheme.displayLarge!.color,
),
),
Text(
'$totalPomodoros',
style: TextStyle(
fontSize: 60,
fontWeight: FontWeight.w600,
color:
Theme.of(context).textTheme.displayLarge!.color,
),
),
],
),
),
),
],
),
),
],
),
);
}
}
Userinterface
timer(start and pause)
---------------------
class _HomeScreenState extends State<HomeScreen> {
int totalSeconds = 1500; //hereherehereherehereherehere
late Timer timer; //hereherehereherehereherehere
void onTick(Timer timer) { //hereherehereherehereherehere
setState(() {
totalSeconds = totalSeconds - 1; //hereherehereherehereherehere
});
}
---------------------
Flexible(
flex: 3,
child: Center(
child: IconButton(
iconSize: 120,
color: Theme.of(context).cardColor,
onPressed: onStartPressed, //hereherehereherehereherehere
icon: const Icon(
Icons.play_circle_outline,
),
),
),
),
data format
----------
void onStartPressed() {
timer = Timer.periodic(const Duration(seconds: 1), onTick);
setState(() {
isRunning = true;
});
}
void onPausePressed() {
timer.cancel();
setState(() {
isRunning = false;
});
}
----------
Flexible(
flex: 3,
child: Center(
child: IconButton(
iconSize: 120,
color: Theme.of(context).cardColor,
onPressed: isRunning ? onPausePressed : onStartPressed,
icon: Icon(
isRunning
? Icons.pause_circle_outline
: Icons.play_circle_outline,
),
),
),
),
--------------
class _HomeScreenState extends State<HomeScreen> {
static const twentyFiveMinutes = 1500;
int totalSeconds = twentyFiveMinutes;
bool isRunning = false;
int totalPomodoros = 0;
late Timer timer;
--------------
--------------
void onTick(Timer timer) {
if (totalSeconds == 0) {
setState(() {
totalPomodoros = totalPomodoros + 1;
isRunning = false;
totalSeconds = twentyFiveMinutes;
});
timer.cancel();
} else {}
setState(() {
totalSeconds = totalSeconds - 1;
});
}
--------------
--------------
String format(int seconds) {
var duration = Duration(seconds: seconds);
print(duration.toString());
print(duration.toString().split('.'));
print(duration.toString().split('.').first);
print(duration.toString().split('.').first.substring(2, 7));
return duration.toString().split('.').first.substring(2, 7);
}
--------------
728x90
반응형
'Programing > Flutter' 카테고리의 다른 글
이런 데서 코드 작성해서 결과 확인 vscode (0) | 2023.04.09 |
---|---|
AppBar, Data Fetching, from Json (0) | 2023.04.05 |
2-2.Buildcontext, wedget life cycle (0) | 2023.03.31 |
2-1.state (0) | 2023.03.31 |
Custom currency widget(currency_card.dart)안에서 offset 관련 parameter 넣기 (0) | 2023.03.28 |
Comments