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

Popular posts from this blog

Second GET API Calling with Bloc simple Example in Flutter

Stack Container Scrollable Card widget UI with Custom Widget

Pagination with Bloc Pattern in Flutter