Fix cursor focus issue when keyboard is on

pull/41/head^2
Xin Yao 4 years ago
parent fd3aac999f
commit 08ed4c3c85
  1. 5
      CHANGELOG.md
  2. 23
      app/pubspec.lock
  3. 9
      lib/widgets/editor.dart
  4. 21
      lib/widgets/raw_editor.dart
  5. 21
      pubspec.lock
  6. 6
      pubspec.yaml

@ -96,4 +96,7 @@
* Line Height calculated based on font size. * Line Height calculated based on font size.
## [0.3.1] ## [0.3.1]
* cursor focus when keyboard is on. * cursor focus when keyboard is on.
## [0.3.2]
* Fix cursor focus issue when keyboard is on.

@ -111,6 +111,27 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.4" 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: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:
@ -124,7 +145,7 @@ packages:
path: ".." path: ".."
relative: true relative: true
source: path source: path
version: "0.3.0" version: "0.3.2"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter

@ -889,10 +889,15 @@ class RenderEditor extends RenderEditableContainerBox
kMargin + kMargin +
offsetInViewport; offsetInViewport;
final caretBottom = endpoints.single.point.dy + kMargin + offsetInViewport; final caretBottom = endpoints.single.point.dy + kMargin + offsetInViewport;
double dy = caretTop; double dy;
if (caretBottom > scrollOffset + viewportHeight) { if (caretTop < scrollOffset) {
dy = caretTop;
} else if (caretBottom > scrollOffset + viewportHeight) {
dy = caretBottom - viewportHeight; dy = caretBottom - viewportHeight;
} }
if (dy == null) {
return null;
}
return math.max(dy, 0.0); return math.max(dy, 0.0);
} }
} }

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter/services.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/attribute.dart';
import 'package:flutter_quill/models/documents/document.dart'; import 'package:flutter_quill/models/documents/document.dart';
import 'package:flutter_quill/models/documents/nodes/block.dart'; import 'package:flutter_quill/models/documents/nodes/block.dart';
@ -123,8 +124,10 @@ class RawEditorState extends EditorState
FocusAttachment _focusAttachment; FocusAttachment _focusAttachment;
CursorCont _cursorCont; CursorCont _cursorCont;
ScrollController _scrollController; ScrollController _scrollController;
KeyboardVisibilityController _keyboardVisibilityController;
KeyboardListener _keyboardListener; KeyboardListener _keyboardListener;
bool _didAutoFocus = false; bool _didAutoFocus = false;
bool _keyboardVisible = false;
DefaultStyles _styles; DefaultStyles _styles;
final ClipboardStatusNotifier _clipboardStatus = ClipboardStatusNotifier(); final ClipboardStatusNotifier _clipboardStatus = ClipboardStatusNotifier();
final LayerLink _toolbarLayerLink = LayerLink(); final LayerLink _toolbarLayerLink = LayerLink();
@ -692,6 +695,16 @@ class RawEditorState extends EditorState
handleDelete, handleDelete,
); );
_keyboardVisibilityController = KeyboardVisibilityController();
_keyboardVisibilityController.onChange.listen((bool visible) {
setState(() {
_keyboardVisible = visible;
if (visible) {
_onChangeTextEditingValue();
}
});
});
_focusAttachment = widget.focusNode.attach(context, _focusAttachment = widget.focusNode.attach(context,
onKey: (node, event) => _keyboardListener.handleRawKeyEvent(event)); onKey: (node, event) => _keyboardListener.handleRawKeyEvent(event));
widget.focusNode.addListener(_handleFocusChanged); widget.focusNode.addListener(_handleFocusChanged);
@ -869,8 +882,14 @@ class RawEditorState extends EditorState
} }
_didChangeTextEditingValue() { _didChangeTextEditingValue() {
requestKeyboard(); if (_keyboardVisible) {
_onChangeTextEditingValue();
} else {
requestKeyboard();
}
}
_onChangeTextEditingValue() {
_showCaretOnScreen(); _showCaretOnScreen();
updateRemoteValueIfNeeded(); updateRemoteValueIfNeeded();
_cursorCont.startOrStopCursorTimerIfNeeded( _cursorCont.startOrStopCursorTimerIfNeeded(

@ -90,6 +90,27 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.5" 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: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:

@ -1,6 +1,6 @@
name: flutter_quill name: flutter_quill
description: One client and affiliated collaborator of Flutter Quill is Bullet Journal App. description: One client and affiliated collaborator of Flutter Quill is Bullet Journal App.
version: 0.3.1 version: 0.3.2
#author: bulletjournal #author: bulletjournal
homepage: https://bulletjournal.us/home/index.html homepage: https://bulletjournal.us/home/index.html
repository: https://github.com/singerdmx/flutter-quill.git repository: https://github.com/singerdmx/flutter-quill.git
@ -17,12 +17,12 @@ dependencies:
collection: ^1.14.13 collection: ^1.14.13
tuple: ^1.0.3 tuple: ^1.0.3
url_launcher: ^5.7.10 url_launcher: ^5.7.10
flutter_colorpicker: ^0.3.4 flutter_colorpicker: ^0.3.5
image_picker: ^0.6.7+22 image_picker: ^0.6.7+22
photo_view: ^0.10.3 photo_view: ^0.10.3
universal_html: ^1.2.1 universal_html: ^1.2.1
file_picker: ^2.1.6 file_picker: ^2.1.6
flutter_keyboard_visibility: ^4.0.4
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save