I have made a streaming provider with a network connectivity library that tell me if the user is offline or online. According to this then I show an online widget to show or an offline widget to show. I am just frustrated to use it on every screen. I want to use it once it will behave like this as any time app goes offline it will overlay the offline widget on the present screen where the user is present.
How can I achieve this?
Here is my Stream Provider.
import 'dart:async';
import 'dart:io';
import 'package:catcher/catcher.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:data_connection_checker/data_connection_checker.dart';
import 'package:edge_alerts/edge_alerts.dart';
import 'package:flutter/material.dart';
enum NetworkStatus { online, offline }
class NetworkStatusService {
//From which the data is connectec WIFI or Mobile.
final StreamController<ConnectivityResult> _networkStatusController =
StreamController<ConnectivityResult>.broadcast();
Connectivity connectivityoftheNetwork = Connectivity();
//Checking if the User is Online or Offline
final StreamController<NetworkStatus> _dataConnectionController =
StreamController<NetworkStatus>.broadcast();
DataConnectionChecker connectivityoftheDataConnection =
DataConnectionChecker();
final List<AddressCheckOptions> _dEFAULTADDRESSES =
List<AddressCheckOptions>.unmodifiable([
AddressCheckOptions(
InternetAddress('2001:4860:4860::8888',
type: InternetAddressType.IPv6), // Google
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
AddressCheckOptions(
InternetAddress('2001:4860:4860::8844',
type: InternetAddressType.IPv6), // Google
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
AddressCheckOptions(
InternetAddress('2606:4700:4700::64',
type: InternetAddressType.IPv6), // CloudFlare
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
AddressCheckOptions(
InternetAddress('2606:4700:4700::6400',
type: InternetAddressType.IPv6), // CloudFlare
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
AddressCheckOptions(
InternetAddress('2620:119:35::35',
type: InternetAddressType.IPv6), // OpenDNS
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
AddressCheckOptions(
InternetAddress('2620:119:53::53',
type: InternetAddressType.IPv6), // OpenDNS
port: DataConnectionChecker.DEFAULT_PORT,
timeout: DataConnectionChecker.DEFAULT_TIMEOUT,
),
]);
// Network Getter Stream
Stream<ConnectivityResult> get networkGetterStream {
return _networkStatusController.stream;
}
// data Connection Stream
Stream<NetworkStatus> get dataConncectionStream {
return _dataConnectionController.stream;
}
//
NetworkStatusService() {
Connectivity().onConnectivityChanged.listen((event) {
_networkStatusController.add(event);
});
DataConnectionChecker().onStatusChange.listen((dataConnectionEvent) {
_dataConnectionController.add(_dataConnectionStatus(dataConnectionEvent));
});
}
NetworkStatus _dataConnectionStatus(DataConnectionStatus status) {
return status == DataConnectionStatus.connected
? NetworkStatus.online
: NetworkStatus.offline;
}
}
Then I will show the widget as the Stream returns.