Skip to content

Instantly share code, notes, and snippets.

@RahmiTufanoglu
Created December 2, 2022 08:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RahmiTufanoglu/f6d68d0c210c199253c1ad0218729012 to your computer and use it in GitHub Desktop.
Save RahmiTufanoglu/f6d68d0c210c199253c1ad0218729012 to your computer and use it in GitHub Desktop.
NetworkStatusWrapper
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:ismile/widgets/network/network_connectivity.dart';
enum NetworkStatus { offline, online }
@immutable
class NetworkStatusWrapper extends StatefulWidget {
const NetworkStatusWrapper({
super.key,
required this.child,
});
final Widget child;
@override
State<NetworkStatusWrapper> createState() => _NetworkStatusWrapperState();
}
class _NetworkStatusWrapperState extends State<NetworkStatusWrapper> {
final _networkConnectivity = NetworkConnectivity.instance;
var _source = {ConnectivityResult.none: false};
late NetworkStatus _networkStatus;
@override
void initState() {
super.initState();
_networkConnectivity.init();
_networkConnectivity.networkStream.listen((source) {
_source = source;
switch (_source.keys.toList().first) {
case ConnectivityResult.mobile:
_networkStatus = _source.values.toList().first //
? NetworkStatus.online
: NetworkStatus.offline;
break;
case ConnectivityResult.wifi:
_networkStatus = _source.values.toList().first //
? NetworkStatus.online
: NetworkStatus.offline;
break;
case ConnectivityResult.none:
default:
_networkStatus = NetworkStatus.offline;
}
setState(() {});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
string,
style: const TextStyle(fontSize: 30),
),
),
);
});
}
@override
void dispose() {
_networkConnectivity.disposeStream();
super.dispose();
}
@override
Widget build(BuildContext context) => widget.child;
}
@immutable
class NetworkStatusWrapper extends StatefulWidget {
const NetworkStatusWrapper({
super.key,
required this.child,
required this.errorWidget,
});
final Widget child;
final Widget Function(String message) errorWidget;
@override
State<NetworkStatusWrapper> createState() => _NetworkStatusWrapperState();
}
class _NetworkStatusWrapperState extends State<NetworkStatusWrapper> {
late final Stream<NetworkStatus> _networkStatus;
@override
void initState() {
super.initState();
_networkStatus = NetworkStatusService().networkStatusController.stream;
}
@override
Widget build(BuildContext context) {
return StreamBuilder<NetworkStatus>(
stream: _networkStatus,
builder: (context, snapshot) {
if (snapshot.hasError) {
return widget.errorWidget(snapshot.error.toString());
}
if (snapshot.data == NetworkStatus.offline) {
WidgetsBinding.instance.addPostFrameCallback((_) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('No Internet :('),
duration: Duration(seconds: 3),
),
);
});
}
return widget.child;
},
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment