Hi Guys, Welcome to Proto Coders Point.
In this flutter tutorial, we will implement a count down timer in flutter application using Timer Class of dart language.
Note: In this tutorial, we will cover 2 ways to implement count down timer flutter.
- Count-down timer using setState() to update Timer Value.
- Count-down timer using Getx StateManagement to update Timer Value.
If you are android developer, I have written a tutorial with source code for implementing count down timer in android app.
How we will use Timer Class in flutter
We are going to make use of dart Timer Class with periodic function to implement CountDownTimer. A Timer Class can we used to make count down in flutter app.
use a periodic timer to repeatedly loop in same interval time. Inside Timer.periodic set a fixed interval duration so that a loop runs exactly at a duration as defined.
Example: Snippet code
Timer _timer = Timer.periodic(Duration(seconds: 1), (timer) { // The Inner Block works Exactly after every 1 second as defined. // You can perform variable count down here // Important, you need to Stop the Timer loop when you want to end it Eg: when value = 0 _timer.cancel(); // will stop it });
1. Implementation of Count Down Timer using setState to update the Timer Value
Video Tutorial
main.dart
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_timer/ByGetXStatemanagement.dart'; import 'package:flutter_timer/BySetState.dart'; import 'package:flutter_timer/CountDownTimerState.dart'; import 'package:get/get.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return GetMaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: 10, ), ElevatedButton( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (build) => BySetState())); }, child: Text('Count Down Timer using setState ();')), SizedBox( height: 30, ), ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (build) => ByGetXStateManagement())); }, child: Text('Count Down Timer using GetX StateManagement')), ], ), ), ); } }
BySetState.dart
import 'dart:async'; import 'package:flutter/material.dart'; class BySetState extends StatefulWidget { @override _BySetStateState createState() => _BySetStateState(); } class _BySetStateState extends State<BySetState> { int _counter = 10; late Timer _timer; void _startTimer() { _counter = 10; _timer = Timer.periodic(Duration(seconds: 1), (timer) { if (_counter > 0) { setState(() { _counter--; }); } else { _timer.cancel(); } }); } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('Count Down Timer using SetState to keep updating'), SizedBox( height: 20, ), Text( '$_counter', style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), ), SizedBox( height: 10, ), ElevatedButton( onPressed: () { _startTimer(); }, child: Text('Start Timer')), SizedBox( height: 10, ), ElevatedButton( onPressed: () { _timer.cancel(); }, child: Text('Pause')), SizedBox( height: 10, ), ElevatedButton( onPressed: () { setState(() { _timer.cancel(); _counter = 10; }); }, child: Text('Reset')) ], ), ), ); } }
2. Implementing Count down timer using GetX StateManagement to update Timer Value
Video Tutorial (GetX State Management Example by implementing Count Down Timer)
#Soon
Create a Statemanagement dart class ‘CountDownTimerState.dart’.
CountDownTimerState.dart
import 'dart:async'; import 'package:get/get.dart'; class CountDownTimerState extends GetxController{ // Initial Count Timer value var SCount = 10; //object for Timer Class late Timer _timer; // a Method to start the Count Down void StateTimerStart(){ //Timer Loop will execute every 1 second, until it reach 0 // once counter value become 0, we store the timer using _timer.cancel() _timer = Timer.periodic(Duration(seconds: 1), (timer) { if(SCount > 0){ SCount--; update(); }else{ _timer.cancel(); } }); } // user can set count down seconds, from TextField void setnumber(var num){ SCount = int.parse(num); update(); } // pause the timer void Pause(){ _timer.cancel(); update(); } // reset count value to 10 void reset(){ _timer.cancel(); SCount = 10 ; update(); } }
ByGetXStatemanagement.dart
import 'package:flutter/material.dart'; import 'package:flutter_timer/CountDownTimerState.dart'; import 'package:get/get.dart'; class ByGetXStateManagement extends StatefulWidget { @override _ByGetXStateManagementState createState() => _ByGetXStateManagementState(); } class _ByGetXStateManagementState extends State<ByGetXStateManagement> { final CountDownTimerState TimerState = Get.put(CountDownTimerState()); final _textEditingController = TextEditingController(); @override void initState() { _textEditingController .addListener(() => TimerState.setnumber(_textEditingController.text)); } @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('Count Down Timer using GetX State management'), SizedBox( height: 40, width: 130, child: TextField( controller: _textEditingController, minLines: 1, keyboardType: TextInputType.number, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10)))), )), GetBuilder<CountDownTimerState>( builder: (_) => Text('${TimerState.SCount}')), ElevatedButton( onPressed: () { TimerState.StateTimerStart(); }, child: Text('Start Getx State Timer')), SizedBox( height: 20, ), ElevatedButton( onPressed: () { TimerState.Pause(); }, child: Text('Pause'), ), SizedBox( height: 20, ), ElevatedButton( onPressed: () { TimerState.reset(); }, child: Text('Reset'), ), ], ), ), ); } }
Recommended Flutter Tutorial Articles
Flutter Provider – State management