network_connectivity.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. /// 网络连接检测器 - 全局实例
  6. final netChecker = _init();
  7. NetworkConnectivityChecker _init() {
  8. final instance = NetworkConnectivityChecker._();
  9. instance.onlineChangedEvent.addListener((sender, e) {
  10. if (e) {
  11. PromptBox.toast("网络已连接");
  12. } else {
  13. PromptBox.error("网络已断开");
  14. }
  15. });
  16. return instance;
  17. }
  18. /// 网络连接检查器
  19. class NetworkConnectivityChecker {
  20. NetworkConnectivityChecker._();
  21. final Connectivity _api = Connectivity();
  22. StreamSubscription<ConnectivityResult>? _subscription;
  23. ConnectivityResult _status = ConnectivityResult.none;
  24. /// 在线状态变更事件
  25. final FEventHandler<bool> onlineChangedEvent = FEventHandler<bool>();
  26. /// 连接状态
  27. ConnectivityResult get status => _status;
  28. /// 是否在线
  29. bool get isOnline => status != ConnectivityResult.none;
  30. void run() {
  31. if (_subscription != null) {
  32. return;
  33. }
  34. _subscription = _api.onConnectivityChanged.listen((event) {
  35. final originIsOnline = isOnline;
  36. _status = event;
  37. if (originIsOnline != isOnline) {
  38. onlineChangedEvent.emit(this, isOnline);
  39. }
  40. });
  41. }
  42. void stop() {
  43. _subscription?.cancel();
  44. _subscription = null;
  45. }
  46. }