diff --git a/lib/core/controllers/colored_text_editing_controller.dart b/lib/core/controllers/colored_text_editing_controller.dart index f499d50..ff62ea2 100644 --- a/lib/core/controllers/colored_text_editing_controller.dart +++ b/lib/core/controllers/colored_text_editing_controller.dart @@ -53,6 +53,12 @@ class ColoredTextEditingController extends TextEditingController { ); } + @override + void dispose() { + languageCheckService.dispose(); + super.dispose(); + } + /// Replaces mistake with given replacement void replaceMistake(Mistake mistake, String replacement) { text = text.replaceRange(mistake.offset, mistake.endOffset, replacement); diff --git a/lib/domain/language_check_service.dart b/lib/domain/language_check_service.dart index 16843d9..5632f1b 100644 --- a/lib/domain/language_check_service.dart +++ b/lib/domain/language_check_service.dart @@ -7,4 +7,10 @@ abstract class LanguageCheckService { /// Returns found mistakes in the given [text]. Future> findMistakes(String text); + + /// Disposes resources of this [LanguageCheckService]. + Future dispose() async { + // does nothing by default, but implementations may need to use it + return; + } } diff --git a/lib/implementations/debounce_lang_tool_service.dart b/lib/implementations/debounce_lang_tool_service.dart index 7aabc2d..b637844 100644 --- a/lib/implementations/debounce_lang_tool_service.dart +++ b/lib/implementations/debounce_lang_tool_service.dart @@ -24,4 +24,10 @@ class DebounceLangToolService extends LanguageCheckService { return value ?? []; } + + @override + Future dispose() async { + await debouncing.close(); + await baseService.dispose(); + } } diff --git a/lib/implementations/throttling_lang_tool_service.dart b/lib/implementations/throttling_lang_tool_service.dart index 139358c..9563587 100644 --- a/lib/implementations/throttling_lang_tool_service.dart +++ b/lib/implementations/throttling_lang_tool_service.dart @@ -21,4 +21,10 @@ class ThrottlingLangToolService extends LanguageCheckService { Future> findMistakes(String text) => throttling.throttle(() => baseService.findMistakes(text)) as Future>; + + @override + Future dispose() async { + await throttling.close(); + await baseService.dispose(); + } }