From e8a3d4c222a677b64ad4046f821ab5a74cee685f Mon Sep 17 00:00:00 2001
From: li3317 <li3317@purdue.edu>
Date: Mon, 1 Mar 2021 11:39:44 -0500
Subject: [PATCH] close _keyboardVisibilityController.onChange in dispose

---
 lib/widgets/raw_editor.dart | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/widgets/raw_editor.dart b/lib/widgets/raw_editor.dart
index 2ae65da4..294dd2d8 100644
--- a/lib/widgets/raw_editor.dart
+++ b/lib/widgets/raw_editor.dart
@@ -1,3 +1,4 @@
+import 'dart:async';
 import 'dart:convert';
 
 import 'package:flutter/cupertino.dart';
@@ -125,6 +126,7 @@ class RawEditorState extends EditorState
   CursorCont _cursorCont;
   ScrollController _scrollController;
   KeyboardVisibilityController _keyboardVisibilityController;
+  StreamSubscription<bool> _keyboardVisibilitySubscription;
   KeyboardListener _keyboardListener;
   bool _didAutoFocus = false;
   bool _keyboardVisible = false;
@@ -698,12 +700,13 @@ class RawEditorState extends EditorState
     );
 
     _keyboardVisibilityController = KeyboardVisibilityController();
-    _keyboardVisibilityController.onChange.listen((bool visible) {
-      _keyboardVisible = visible;
-      if (visible) {
-        _onChangeTextEditingValue();
-      }
-    });
+    _keyboardVisibilitySubscription =
+        _keyboardVisibilityController.onChange.listen((bool visible) {
+          _keyboardVisible = visible;
+          if (visible) {
+            _onChangeTextEditingValue();
+          }
+        });
 
     _focusAttachment = widget.focusNode.attach(context,
         onKey: (node, event) => _keyboardListener.handleRawKeyEvent(event));
@@ -865,6 +868,7 @@ class RawEditorState extends EditorState
   @override
   void dispose() {
     closeConnectionIfNeeded();
+    _keyboardVisibilitySubscription.cancel();
     assert(!hasConnection);
     _selectionOverlay?.dispose();
     _selectionOverlay = null;