text_storage.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'dart:convert';
  2. import 'dart:typed_data';
  3. import 'package:fis_common/index.dart';
  4. import 'package:fis_common/logger/logger.dart';
  5. import 'package:vitalapp/architecture/storage/file_storage_native_and_web.dart';
  6. import 'package:vitalapp/architecture/values/store_keys.dart';
  7. import 'package:vitalapp/rpc.dart';
  8. import 'shared_storage.dart';
  9. /// 文本存储
  10. class TextStorage {
  11. TextStorage({
  12. required this.fileName,
  13. this.directory = "",
  14. });
  15. final String fileName;
  16. final String directory;
  17. FileStorageNativeAndWeb? _fileStorage;
  18. Future<bool> save(String text) async {
  19. try {
  20. final bytes = Uint8List.fromList(utf8.encode(text));
  21. _fileStorage ??= FileStorageNativeAndWeb.createInstance(directory);
  22. final result = await _fileStorage!.save(fileName, bytes);
  23. return result;
  24. } catch (e) {
  25. logger.e("TextStorage save text error.", e);
  26. return false;
  27. }
  28. }
  29. Future<String?> read() async {
  30. _fileStorage ??= FileStorageNativeAndWeb.createInstance(directory);
  31. final bytes = await _fileStorage!.read(fileName);
  32. if (bytes == null || bytes.isEmpty) return null;
  33. try {
  34. final str = utf8.decode(bytes);
  35. return str;
  36. } catch (e) {
  37. logger.e("TextStorage convert bytes to string error.", e);
  38. return null;
  39. }
  40. }
  41. Future<bool> delete() async {
  42. try {
  43. _fileStorage ??= FileStorageNativeAndWeb.createInstance(directory);
  44. final result = await _fileStorage!.delete(fileName);
  45. return result;
  46. } catch (e) {
  47. logger.e("TextStorage clear error.", e);
  48. return false;
  49. }
  50. }
  51. Future<bool> deleteDirectory() async {
  52. try {
  53. _fileStorage ??= FileStorageNativeAndWeb.createInstance(directory);
  54. final result = await _fileStorage!.deleteDirectory(directory);
  55. return result;
  56. } catch (e) {
  57. logger.e("TextStorage clear error.", e);
  58. return false;
  59. }
  60. }
  61. }
  62. ///纯web端的缓存
  63. class TextStoragePureWeb extends TextStorage {
  64. TextStoragePureWeb(String fileName) : super(fileName: fileName);
  65. @override
  66. Future<String?> read() async {
  67. final storeKey = _getStoreKey();
  68. final data = SharedStorageService.ins.getString(storeKey);
  69. return data;
  70. }
  71. @override
  72. Future<bool> save(String text) async {
  73. final storeKey = _getStoreKey();
  74. final saved = await SharedStorageService.ins.setString(storeKey, text);
  75. return saved;
  76. }
  77. String _getStoreKey() => StoreKeys.STORE_TEXTDATA_GEN.format([this.fileName]);
  78. }
  79. class TextStorageShellWeb extends TextStorage {
  80. TextStorageShellWeb(String fileName) : super(fileName: fileName);
  81. @override
  82. Future<String?> read() async {
  83. return await rpc.platform.getText(this.fileName);
  84. }
  85. @override
  86. Future<bool> save(String text) async {
  87. return await rpc.platform.saveText(this.fileName, text);
  88. }
  89. }