Faça um aplicativo de Relógio Pomodoro no Flutter

Tempo de leitura: 2 minutes

Neste tutorial, mostrarei como criar um aplicativo de Relógio Pomodoro usando o Flutter. Com este tutorial, você aprenderá como usar o Timer no flutter e criaremos um layout bonito, então vamos começar.

Código Fonte:

Antes de tudo, precisamos adicionar uma biblioteca de terceira parte para a barra de progresso circular dentro do seu arquivo “pubspec.yaml” cole esta linha dentro de suas dependências

dependencies:
 percent_indicator: "^2.1.5"

Agora vamos começar o código

import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';

void main() => runApp(
  MaterialApp(
    debugShowCheckedModeBanner: false,
    home: CountDownTimer(),
  )
);

class CountDownTimer extends StatefulWidget {
  @override
  _CountDownTimerState createState() => _CountDownTimerState();
}

class _CountDownTimerState extends State<CountDownTimer> {
  double percent = 0;
  static int TimeInMinut = 25;
  int TimeInSec = TimeInMinut * 60;
  Timer timer;
  void _StartTimer(){
    TimeInMinut = 25;
    int Time = TimeInSec;
    double SecPercent = (Time/100) ;
    print(SecPercent);
    timer = Timer.periodic(Duration(seconds: 1), (timer){
      setState(() {
        if(Time >0){
          Time--;
          if(Time % 60 == 0){
            TimeInMinut--;
          }
          if(Time% SecPercent == 0){
            if(percent <1){
              percent+=0.01;
            }else{
              percent = 1;
            }

          }
        }else{
          percent = 0;
          TimeInMinut = 25;
          timer.cancel();

        }
      });
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        backgroundColor: Colors.white,
        body: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(
              colors: [Color(0xFF1542BF),Color(0xFF51A8FF)],
              begin: FractionalOffset(0.5,1)
            )
          ),
          width: double.infinity,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.only(top:18.0),
                child: Text(
                  "Pomodoro",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 50.0
                  ),
                ),
              ),
              Expanded(
                child: CircularPercentIndicator(
                  percent: percent,
                  animation: true,
                  lineWidth: 20.0,
                  circularStrokeCap: CircularStrokeCap.round,
                  reverse: false,
                  animateFromLastPercent: true,
                  radius: 250.0,
                  progressColor: Colors.white,
                  center: Text(
                    "$TimeInMinut",
                    style: TextStyle(
                      color: Colors.white,
                        fontSize: 80.0,
                    ),
                  ),
                ),
              ),

              SizedBox(height: 30.0,),
              Expanded(
                child: Container(
                  width: double.infinity,
                  decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.only(topLeft:Radius.circular(30.0),topRight: Radius.circular(30.0))
                  ),
                  child: Padding(
                    padding: const EdgeInsets.only(top: 30.0, left: 20.0, right: 20.0),
                    child: Column(
                      children: <Widget>[
                        Expanded(
                          child: Row(
                            children: <Widget>[
                              Expanded(
                                child:  Column(
                                  children: <Widget>[
                                    Text(
                                      "Study Time",
                                      style: TextStyle(
                                        fontSize: 30.0,
                                      ),
                                    ),
                                    SizedBox(height: 10.0,),
                                    Text(
                                      "25",
                                      style: TextStyle(
                                        fontSize: 80.0
                                      ),
                                    )
                                  ],
                                ),
                              ),
                              Expanded(
                                child:  Column(
                                  children: <Widget>[
                                    Text(
                                      "Break Time",
                                      style: TextStyle(
                                        fontSize: 30.0,
                                      ),
                                    ),
                                    SizedBox(height: 10.0,),
                                    Text(
                                      "5",
                                      style: TextStyle(
                                        fontSize: 80.0
                                      ),
                                    )
                                  ],
                                ),
                              ),

                            ],
                          ),
                        ),
                        Padding(
                          padding: EdgeInsets.symmetric(vertical: 28.0),
                          child: RaisedButton(
                            color: Colors.blue,
                            shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(100.0),
                            ),
                            child: Padding(
                              padding: EdgeInsets.all(20.0),
                              child: Text("Start Studying", style: TextStyle(color:Colors.white,fontSize: 22.0),),
                            ),
                            onPressed: _StartTimer,
                          ),
                        ),
                      ],
                    ),
                  )
                ),
              )
              
            ],
          ),
        ),
      ),
    );
  }
}

 

Espero que este tutorial tenha sido útil, se você gostou, pode colocar no comentário o que você quer para um projeto futuro