From db43b7dca5d5b061364a44a081b846d5cb3b59bf Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 14 Oct 2024 23:08:53 +0800 Subject: [PATCH] :lipstick: Better auto save --- assets/locales/en_us.json | 2 +- lib/controllers/post_editor_controller.dart | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/assets/locales/en_us.json b/assets/locales/en_us.json index 2b6a569..d6692e9 100644 --- a/assets/locales/en_us.json +++ b/assets/locales/en_us.json @@ -140,7 +140,7 @@ "clear": "Clear", "pinPost": "Pin this post", "unpinPost": "Unpin this post", - "postRestoreFromLocal": "Restore from local", + "postRestoreFromLocal": "Restored", "postAutoSaveAt": "Auto saved at @date", "postCategoriesAndTags": "Categories n' Tags", "postPublishDate": "Publish Date", diff --git a/lib/controllers/post_editor_controller.dart b/lib/controllers/post_editor_controller.dart index c8acbef..580af37 100644 --- a/lib/controllers/post_editor_controller.dart +++ b/lib/controllers/post_editor_controller.dart @@ -43,14 +43,17 @@ class PostEditorController extends GetxController { RxBool isRestoreFromLocal = false.obs; Rx lastSaveTime = Rx(null); - Timer? _saveTimer; + Future? _saveFuture; PostEditorController() { SharedPreferences.getInstance().then((inst) { _prefs = inst; - _saveTimer = Timer.periodic( - const Duration(seconds: 3), - (Timer t) { + }); + contentController.addListener(() { + contentLength.value = contentController.text.length; + _saveFuture ??= Future.delayed( + const Duration(seconds: 1), + () { if (isNotEmpty) { localSave(); lastSaveTime.value = DateTime.now(); @@ -59,12 +62,10 @@ class PostEditorController extends GetxController { localClear(); lastSaveTime.value = null; } + _saveFuture = null; }, ); }); - contentController.addListener(() { - contentLength.value = contentController.text.length; - }); } Future editOverview(BuildContext context) { @@ -355,8 +356,6 @@ class PostEditorController extends GetxController { @override void dispose() { - _saveTimer?.cancel(); - titleController.dispose(); descriptionController.dispose(); contentController.dispose();