network_monitor.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import 'dart:async';
  2. import 'package:connectivity_plus/connectivity_plus.dart';
  3. import 'package:flowy_log/flowy_log.dart';
  4. import 'package:flowy_sdk/dispatch/dispatch.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-user/observable.pb.dart';
  6. import 'package:flutter/services.dart';
  7. class NetworkMonitor {
  8. final Connectivity _connectivity = Connectivity();
  9. late StreamSubscription<ConnectivityResult> _connectivitySubscription;
  10. NetworkMonitor() {
  11. _connectivitySubscription = _connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
  12. }
  13. Future<void> start() async {
  14. late ConnectivityResult result;
  15. // Platform messages may fail, so we use a try/catch PlatformException.
  16. try {
  17. result = await _connectivity.checkConnectivity();
  18. } on PlatformException catch (e) {
  19. Log.error('Couldn\'t check connectivity status. $e');
  20. return;
  21. }
  22. return _updateConnectionStatus(result);
  23. }
  24. void stop() {
  25. _connectivitySubscription.cancel();
  26. }
  27. Future<void> _updateConnectionStatus(ConnectivityResult result) async {
  28. final networkType = () {
  29. switch (result) {
  30. case ConnectivityResult.wifi:
  31. return NetworkType.Wifi;
  32. case ConnectivityResult.ethernet:
  33. return NetworkType.Ethernet;
  34. case ConnectivityResult.mobile:
  35. return NetworkType.Cell;
  36. case ConnectivityResult.none:
  37. return NetworkType.UnknownNetworkType;
  38. }
  39. }();
  40. Log.info("Network type: $networkType");
  41. final state = NetworkState.create()..ty = networkType;
  42. UserEventUpdateNetworkType(state).send().then((result) {
  43. result.fold(
  44. (l) {},
  45. (e) => Log.error(e),
  46. );
  47. });
  48. }
  49. }