| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | import 'dart:async';import 'package:connectivity_plus/connectivity_plus.dart';import 'package:flowy_log/flowy_log.dart';import 'package:flowy_sdk/dispatch/dispatch.dart';import 'package:flowy_sdk/protobuf/flowy-net/network_state.pb.dart';import 'package:flutter/services.dart';class NetworkMonitor {  final Connectivity _connectivity = Connectivity();  late StreamSubscription<ConnectivityResult> _connectivitySubscription;  NetworkMonitor() {    _connectivitySubscription = _connectivity.onConnectivityChanged.listen(_updateConnectionStatus);  }  Future<void> start() async {    late ConnectivityResult result;    // Platform messages may fail, so we use a try/catch PlatformException.    try {      result = await _connectivity.checkConnectivity();    } on PlatformException catch (e) {      Log.error('Couldn\'t check connectivity status. $e');      return;    }    return _updateConnectionStatus(result);  }  void stop() {    _connectivitySubscription.cancel();  }  Future<void> _updateConnectionStatus(ConnectivityResult result) async {    final networkType = () {      switch (result) {        case ConnectivityResult.wifi:          return NetworkType.Wifi;        case ConnectivityResult.ethernet:          return NetworkType.Ethernet;        case ConnectivityResult.mobile:          return NetworkType.Cell;        case ConnectivityResult.none:          return NetworkType.UnknownNetworkType;        case ConnectivityResult.bluetooth:          return NetworkType.UnknownNetworkType;      }    }();    Log.info("Network type: $networkType");    final state = NetworkState.create()..ty = networkType;    NetworkEventUpdateNetworkType(state).send().then((result) {      result.fold(        (l) {},        (e) => Log.error(e),      );    });  }}
 |