Bloc (State Management) Check Connectivity Example using Cubit
import 'dart:async';
import 'package:connectivity/connectivity.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
enum InternetState { Initial, Lost, Gained }
/// Difference between Cubit and Bloc is that Cubit is based on Function and
/// Bloc is based on Event
/// In short, Cubit is Function based and Bloc is Event based
class InternetCubit extends Cubit<InternetState>
{
final Connectivity _connectivity = Connectivity();
StreamSubscription? connectivitySubscription;
InternetCubit() : super(InternetState.Initial) {
connectivitySubscription = _connectivity.onConnectivityChanged.listen((result) {
if(result == ConnectivityResult.mobile || result == ConnectivityResult.wifi)
{
emit(InternetState.Gained);
}
else
{
emit(InternetState.Lost);
}
},);
}
@override
Future<void> close()
{
connectivitySubscription?.cancel();
return super.close();
}
}
import "package:firebase/Stateless_Component_UI/cubits/internet_cubit.dart";
import "package:flutter/material.dart";
import "package:flutter_bloc/flutter_bloc.dart";
/// Difference between Cubit and Bloc is that Cubit is based on Function and
/// Bloc is based on Event
/// In short, Cubit is Function based and Bloc is Event based
void main()
{
runApp(const MyApp());
}
class MyApp extends StatelessWidget
{
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) {
return InternetCubit();
},
child: MaterialApp(
title: "Bloc Internet Connectivity",
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.grey,
),
home: const HomeScreen3(),
),
);
}
}
class HomeScreen3 extends StatelessWidget
{
const HomeScreen3({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Check Connectivity"),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: Center(
child: BlocConsumer<InternetCubit, InternetState>(
listener: (context, state) {
if(state == InternetState.Gained)
{
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Internet Connected!"),),
);
}
else if(state == InternetState.Lost)
{
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Internet not Connected!"),),
);
}
},
builder: (context, state) {
if(state == InternetState.Gained)
{
return const Text("Connected!");
}
else if(state == InternetState.Lost)
{
return const Text("Not Connected!");
}
else
{
return const Text("Loading...");
}
},
),
),
);
}
}
Comments
Post a Comment