network_quality_monitor 0.2.0
network_quality_monitor: ^0.2.0 copied to clipboard
Flutter plugin for monitoring network status and basic network quality on Android and iOS.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:network_quality_monitor/network_quality_monitor.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _plugin = NetworkQualityMonitor();
NetworkQualityStatus? _current;
String _log = 'Ready';
bool _listening = false;
@override
void initState() {
super.initState();
_refreshOnce();
}
Future<void> _refreshOnce() async {
final data = await _plugin.getCurrentStatus();
if (!mounted) return;
setState(() {
_current = data;
_log = 'Current: ${data.raw}\n\n$_log';
});
}
void _startListening() {
if (_listening) return;
_listening = true;
_plugin.onStatusChanged.listen((event) {
if (!mounted) return;
setState(() {
_current = event;
_log = 'Changed: ${event.raw}\n\n$_log';
});
});
}
Future<void> _probeNow() async {
final data = await _plugin.probeQuality(
probeUrl: 'https://www.baidu.com/favicon.ico',
timeoutMs: 1500,
);
if (!mounted) return;
setState(() {
_current = data;
_log = 'Probe: ${data.raw}\n\n$_log';
});
}
@override
Widget build(BuildContext context) {
final current = _current;
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Network Quality Monitor Example')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ElevatedButton(
onPressed: _refreshOnce,
child: const Text('Get Current Status'),
),
const SizedBox(height: 12),
ElevatedButton(
onPressed: _startListening,
child: const Text('Start Listening'),
),
const SizedBox(height: 12),
ElevatedButton(
onPressed: _probeNow,
child: const Text('Probe Quality Now'),
),
const SizedBox(height: 16),
Text('Connected: ${current?.isConnected ?? false}'),
Text('Type: ${current?.networkType.name ?? 'unknown'}'),
Text('Quality: ${current?.quality.name ?? 'unknown'}'),
Text('Downlink(Kbps): ${current?.downlinkKbps ?? '-'}'),
const SizedBox(height: 16),
const Text(
'Event Log',
style: TextStyle(fontWeight: FontWeight.w600),
),
const SizedBox(height: 8),
Expanded(child: SingleChildScrollView(child: Text(_log))),
],
),
),
),
);
}
}