device.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import 'dart:convert';
  2. import 'package:get/get.dart';
  3. import 'package:vitalapp/global.dart';
  4. import 'package:vnote_device_plugin/consts/types.dart';
  5. import 'package:vitalapp/architecture/storage/text_storage.dart';
  6. import 'package:vitalapp/managers/interfaces/models/device.dart';
  7. import 'interfaces/device.dart';
  8. import 'interfaces/system_setting.dart';
  9. class DeviceManager extends IDeviceManager {
  10. static final _typeConvertMap = <String, String>{
  11. "Temp": DeviceTypes.TEMP,
  12. "Weight": DeviceTypes.WEIGHT,
  13. "SpO2": DeviceTypes.SPO2,
  14. "NIBP": DeviceTypes.NIBP,
  15. "GLU": DeviceTypes.SUGAR,
  16. "Urine": DeviceTypes.URINE,
  17. "ICReader": DeviceTypes.IC_READER,
  18. "ECG": DeviceTypes.HEART,
  19. };
  20. final _storage = TextStorage(fileName: "devices.cfg");
  21. final _deviceStorage = TextStorage(fileName: "devices.setting.cfg");
  22. List<DeviceModel>? _cacheList;
  23. /// TODO BAKA 获取设备权限缓存需要优化一下
  24. @override
  25. Future<List<String>> getAccessTypes() async {
  26. List<String> settingTypes = [];
  27. if (kIsOnline == true) {
  28. settingTypes =
  29. await Get.find<ISystemSettingManager>().getEnableDeviceKeysAsync();
  30. _deviceStorage.save(jsonEncode(settingTypes));
  31. } else {
  32. String? settingTypesString = await _deviceStorage.read();
  33. settingTypes =
  34. jsonDecode(settingTypesString ?? '').cast<String>().toList();
  35. }
  36. final types = settingTypes
  37. .map((e) => _typeConvertMap[e])
  38. .where((e) => e != null)
  39. .map((e) => e!)
  40. .toList();
  41. return types;
  42. }
  43. @override
  44. Future<void> addDevice(DeviceModel model) async {
  45. final source = await getDeviceList();
  46. final list = List<DeviceModel>.from(source);
  47. list.removeWhere((e) => e.type == model.type);
  48. list.add(model);
  49. saveDeviceList(list);
  50. }
  51. @override
  52. Future<void> removeDeviceByType(String type) async {
  53. final source = await getDeviceList();
  54. final list = List<DeviceModel>.from(source);
  55. list.removeWhere((e) => e.type == type);
  56. saveDeviceList(list);
  57. }
  58. @override
  59. Future<List<DeviceModel>> getDeviceList() async {
  60. if (_cacheList != null) return _cacheList!;
  61. final jsonText = await _storage.read();
  62. if (jsonText == null) {
  63. _cacheList = [];
  64. } else {
  65. final List<dynamic> mapList = jsonDecode(jsonText);
  66. _cacheList = mapList.map((e) => DeviceModel.fromJson(e)).toList();
  67. }
  68. return _cacheList!;
  69. }
  70. @override
  71. Future<void> saveDeviceList(List<DeviceModel> deviceList) async {
  72. _cacheList = deviceList;
  73. final jsonText = jsonEncode(deviceList);
  74. await _storage.save(jsonText);
  75. }
  76. }