Provider (Automatic Counter App Timer with periodic) Counter App Example
import "dart:async";
import "package:firebase/Stateless_Component_UI/Provider/Providers/count_provider.dart";
import "package:flutter/material.dart";
import "package:provider/provider.dart";
void main()
{
runApp(const MyApp());
}
class MyApp extends StatelessWidget
{
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) {
return CountProvider();
},
child: MaterialApp(
title: "Counter App",
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.grey,
),
home: const CountExample(),
),
);
}
}
class CountExample extends StatefulWidget
{
const CountExample({super.key});
@override
State<CountExample> createState() => _CountExampleState();
}
class _CountExampleState extends State<CountExample> {
@override
void initState()
{
super.initState();
Timer.periodic(const Duration(seconds: 1), (timer) {
final countProvider = Provider.of<CountProvider>(context, listen: false);
countProvider.setCount();
},);
}
@override
Widget build(BuildContext context) {
/// By applying listen: false, only Consumer widget will rebuild every time as shown below
/// otherwise build() method will call every time in case of listen: true (by default)
final countProvider = Provider.of<CountProvider>(context, listen: false);
print("Build...${countProvider.count}"); //To check for build() method call
return Scaffold(
appBar: AppBar(
title: const Text("Counter App"),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: Center(
child: Consumer<CountProvider>(
builder: (context, value, child) {
print("Print only this widget builds in Consumer...${value.count}");
/// Here, only below Text() widget will rebuilding...
return Text(value.count.toString(),
style: const TextStyle(fontSize: 50.0),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
countProvider.setCount();
},
backgroundColor: Colors.blue,
child: const Icon(Icons.add, color: Colors.white),
),
);
}
}
import "package:flutter/material.dart";
class CountProvider extends ChangeNotifier
{
int _count = 0;
int get count {
return _count;
}
void setCount()
{
_count++;
notifyListeners();
}
}
Comments
Post a Comment