Ensure that both self.text and self.selectedTextRange are updated before triggering textDidChange: or selectionDidChange: on the input delegate (which then re-computes positions). This prevents inconsistencies in selection vs text position/offset lookups triggered by didChange notifications. Ensure that rangeOfComposedCharacterSequenceAtIndex: is only ever called for index values > 0 && < self.text.length. This prevents such calls for position with index == self.text.length. Also reduces unnecessary textDidChange/selectionDidChange notifications: replaceRange:withText: and setMarkedText:selectedRange: are only ever called by UIKit and methods called by UIKit (insertText, deleteBackward), so notification is unnecessary.
Flutter Engine
Flutter is a new way to build high-performance, cross-platform mobile apps. Flutter is optimized for today's, and tomorrow's, mobile devices. We are focused on low-latency input and high frame rates on Android and iOS.
The Flutter Engine is the runtime environment for hosting Flutter applications. Most developers will interact with Flutter via the Flutter Framework and APIs, which run inside the engine.
Flutter is an early-stage open-source project. We are still adding features. However, you can build demos and examples today. We hope you try it out and send us feedback.
-
For information about using Flutter to build apps, please see the getting started guide.
-
For information about contributing to the Flutter framework, please see the main Flutter repository.
-
For information about contributing code to the engine itself, please see CONTRIBUTING.md.
Community
Join us in our Gitter chat room or join our mailing list, flutter-dev@googlegroups.com.