network_connectivity.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import 'dart:async';
  2. import 'package:connectivity_plus/connectivity_plus.dart';
  3. import 'package:vnote_device_plugin/events/event_type.dart';
  4. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  5. import 'package:fis_common/logger/logger.dart';
  6. /// 网络连接检测器 - 全局实例
  7. final netChecker = _init();
  8. NetworkConnectivityChecker _init() {
  9. final instance = NetworkConnectivityChecker._();
  10. bool isConnecting = true;
  11. instance.onlineChangedEvent.addListener((sender, e) {
  12. if (e) {
  13. if (!isConnecting) {
  14. PromptBox.toast("网络已连接");
  15. }
  16. } else {
  17. PromptBox.error("网络已断开");
  18. }
  19. isConnecting = e;
  20. });
  21. return instance;
  22. }
  23. /// 网络连接检查器
  24. class NetworkConnectivityChecker {
  25. NetworkConnectivityChecker._();
  26. final Connectivity _api = Connectivity();
  27. StreamSubscription<ConnectivityResult>? _subscription;
  28. ConnectivityResult _status = ConnectivityResult.none;
  29. /// 在线状态变更事件
  30. final FEventHandler<bool> onlineChangedEvent = FEventHandler<bool>();
  31. /// 连接状态
  32. ConnectivityResult get status => _status;
  33. /// 是否在线
  34. bool get isOnline => status != ConnectivityResult.none;
  35. void run() {
  36. if (_subscription != null) {
  37. return;
  38. }
  39. _subscription = _api.onConnectivityChanged.listen((event) {
  40. logger.i(
  41. "NetworkConnectivityChecker - Current net connection type: ${event.name}.");
  42. final originIsOnline = isOnline;
  43. _status = event;
  44. if (originIsOnline != isOnline) {
  45. onlineChangedEvent.emit(this, isOnline);
  46. }
  47. logger.i("NetworkConnectivityChecker - IsOnline: $isOnline.");
  48. });
  49. }
  50. void stop() {
  51. _subscription?.cancel();
  52. _subscription = null;
  53. }
  54. }