zeba_academy_connectivity_manager 1.0.0
zeba_academy_connectivity_manager: ^1.0.0 copied to clipboard
Smart connectivity manager for Flutter apps with offline request queue, retry system, and connection listeners.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:zeba_academy_connectivity_manager/zeba_academy_connectivity_manager.dart';
void main() {
runApp(const ConnectivityExampleApp());
}
class ConnectivityExampleApp extends StatelessWidget {
const ConnectivityExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "Connectivity Manager",
theme: ThemeData(
colorSchemeSeed: Colors.blue,
useMaterial3: true,
),
home: const ConnectivityHome(),
);
}
}
class ConnectivityHome extends StatefulWidget {
const ConnectivityHome({super.key});
@override
State<ConnectivityHome> createState() => _ConnectivityHomeState();
}
class _ConnectivityHomeState extends State<ConnectivityHome> {
final ConnectivityService connectivity = ConnectivityService();
final RequestQueue queue = RequestQueue();
final RetryManager retryManager = RetryManager();
String status = "Checking...";
String apiResult = "No request yet";
@override
void initState() {
super.initState();
connectivity.onStatusChange.listen((event) {
setState(() {
status =
event.status == ConnectivityStatus.online ? "Online" : "Offline";
});
});
}
Future<void> makeRequest() async {
final online = await connectivity.isOnline();
if (!online) {
queue.add(() async {
return makeRequest();
});
setState(() {
apiResult = "Offline: Request queued";
});
return;
}
final result = await retryManager.retry(() async {
await Future.delayed(const Duration(seconds: 1));
return "API request successful!";
});
setState(() {
apiResult = result;
});
}
void openWebSocket() {
final socket = WebSocketManager();
socket.connect("wss://echo.websocket.events");
socket.messages.listen((message) {
setState(() {
apiResult = "Socket message: $message";
});
});
socket.send("Hello from Flutter");
}
Color get statusColor {
if (status == "Online") return Colors.green;
if (status == "Offline") return Colors.red;
return Colors.orange;
}
IconData get statusIcon {
if (status == "Online") return Icons.wifi;
if (status == "Offline") return Icons.wifi_off;
return Icons.wifi_find;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Connectivity Manager Demo"),
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.all(20),
child: Column(
children: [
/// STATUS CARD
Card(
elevation: 2,
child: ListTile(
leading: Icon(statusIcon, color: statusColor, size: 30),
title: const Text("Network Status"),
subtitle: Text(
status,
style: TextStyle(
fontSize: 16,
color: statusColor,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(height: 20),
/// API RESULT CARD
Card(
elevation: 2,
child: Padding(
padding: const EdgeInsets.all(16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Icon(Icons.api, size: 30),
const SizedBox(width: 10),
Expanded(
child: Text(
apiResult,
style: const TextStyle(fontSize: 15),
),
),
],
),
),
),
const SizedBox(height: 30),
/// BUTTONS
SizedBox(
width: double.infinity,
child: ElevatedButton.icon(
icon: const Icon(Icons.cloud_download),
label: const Text("Make API Request"),
onPressed: makeRequest,
),
),
const SizedBox(height: 10),
SizedBox(
width: double.infinity,
child: ElevatedButton.icon(
icon: const Icon(Icons.wifi_tethering),
label: const Text("Open WebSocket"),
onPressed: openWebSocket,
),
),
],
),
),
);
}
}