From 08ed4c3c85b2bf38cb9631339f81d5ab68edc114 Mon Sep 17 00:00:00 2001 From: Xin Yao Date: Wed, 24 Feb 2021 02:34:41 -0800 Subject: [PATCH] Fix cursor focus issue when keyboard is on --- CHANGELOG.md | 5 ++++- app/pubspec.lock | 23 ++++++++++++++++++++++- lib/widgets/editor.dart | 9 +++++++-- lib/widgets/raw_editor.dart | 21 ++++++++++++++++++++- pubspec.lock | 21 +++++++++++++++++++++ pubspec.yaml | 6 +++--- 6 files changed, 77 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cff31022..2ae32204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,4 +96,7 @@ * Line Height calculated based on font size. ## [0.3.1] -* cursor focus when keyboard is on. \ No newline at end of file +* cursor focus when keyboard is on. + +## [0.3.2] +* Fix cursor focus issue when keyboard is on. \ No newline at end of file diff --git a/app/pubspec.lock b/app/pubspec.lock index 53c35ed4..92f7e30d 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -111,6 +111,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.4" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.4" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -124,7 +145,7 @@ packages: path: ".." relative: true source: path - version: "0.3.0" + version: "0.3.2" flutter_test: dependency: "direct dev" description: flutter diff --git a/lib/widgets/editor.dart b/lib/widgets/editor.dart index 50b056dc..29472aae 100644 --- a/lib/widgets/editor.dart +++ b/lib/widgets/editor.dart @@ -889,10 +889,15 @@ class RenderEditor extends RenderEditableContainerBox kMargin + offsetInViewport; final caretBottom = endpoints.single.point.dy + kMargin + offsetInViewport; - double dy = caretTop; - if (caretBottom > scrollOffset + viewportHeight) { + double dy; + if (caretTop < scrollOffset) { + dy = caretTop; + } else if (caretBottom > scrollOffset + viewportHeight) { dy = caretBottom - viewportHeight; } + if (dy == null) { + return null; + } return math.max(dy, 0.0); } } diff --git a/lib/widgets/raw_editor.dart b/lib/widgets/raw_editor.dart index fbbb8a83..b99ddae1 100644 --- a/lib/widgets/raw_editor.dart +++ b/lib/widgets/raw_editor.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:flutter_quill/models/documents/attribute.dart'; import 'package:flutter_quill/models/documents/document.dart'; import 'package:flutter_quill/models/documents/nodes/block.dart'; @@ -123,8 +124,10 @@ class RawEditorState extends EditorState FocusAttachment _focusAttachment; CursorCont _cursorCont; ScrollController _scrollController; + KeyboardVisibilityController _keyboardVisibilityController; KeyboardListener _keyboardListener; bool _didAutoFocus = false; + bool _keyboardVisible = false; DefaultStyles _styles; final ClipboardStatusNotifier _clipboardStatus = ClipboardStatusNotifier(); final LayerLink _toolbarLayerLink = LayerLink(); @@ -692,6 +695,16 @@ class RawEditorState extends EditorState handleDelete, ); + _keyboardVisibilityController = KeyboardVisibilityController(); + _keyboardVisibilityController.onChange.listen((bool visible) { + setState(() { + _keyboardVisible = visible; + if (visible) { + _onChangeTextEditingValue(); + } + }); + }); + _focusAttachment = widget.focusNode.attach(context, onKey: (node, event) => _keyboardListener.handleRawKeyEvent(event)); widget.focusNode.addListener(_handleFocusChanged); @@ -869,8 +882,14 @@ class RawEditorState extends EditorState } _didChangeTextEditingValue() { - requestKeyboard(); + if (_keyboardVisible) { + _onChangeTextEditingValue(); + } else { + requestKeyboard(); + } + } + _onChangeTextEditingValue() { _showCaretOnScreen(); updateRemoteValueIfNeeded(); _cursorCont.startOrStopCursorTimerIfNeeded( diff --git a/pubspec.lock b/pubspec.lock index 9842e845..664e3fc8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -90,6 +90,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.5" + flutter_keyboard_visibility: + dependency: "direct main" + description: + name: flutter_keyboard_visibility + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.4" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" flutter_plugin_android_lifecycle: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8abfafb7..90baae21 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill description: One client and affiliated collaborator of Flutter Quill is Bullet Journal App. -version: 0.3.1 +version: 0.3.2 #author: bulletjournal homepage: https://bulletjournal.us/home/index.html repository: https://github.com/singerdmx/flutter-quill.git @@ -17,12 +17,12 @@ dependencies: collection: ^1.14.13 tuple: ^1.0.3 url_launcher: ^5.7.10 - flutter_colorpicker: ^0.3.4 + flutter_colorpicker: ^0.3.5 image_picker: ^0.6.7+22 photo_view: ^0.10.3 universal_html: ^1.2.1 file_picker: ^2.1.6 - + flutter_keyboard_visibility: ^4.0.4 dev_dependencies: flutter_test: