import 'package:flutter/material.dart'; import 'package:flutter_quill/src/widgets/editor.dart'; import 'package:flutter_quill/src/widgets/raw_editor.dart'; import 'package:flutter_test/flutter_test.dart'; extension QuillEnterText on WidgetTester { /// Give the QuillEditor widget specified by [finder] the focus. Future quillGiveFocus(Finder finder) { return TestAsyncUtils.guard(() async { final editor = state( find.descendant( of: finder, matching: find.byType(QuillEditor, skipOffstage: finder.skipOffstage), matchRoot: true), ); editor.widget.focusNode.requestFocus(); await pump(); expect(editor.widget.focusNode.hasFocus, isTrue); }); } /// Give the QuillEditor widget specified by [finder] the focus and update its /// editing value with [text], as if it had been provided by the onscreen /// keyboard. /// /// The widget specified by [finder] must be a [QuillEditor] or have a /// [QuillEditor] descendant. For example `find.byType(QuillEditor)`. Future quillEnterText(Finder finder, String text) async { return TestAsyncUtils.guard(() async { await quillGiveFocus(finder); await updateEditingValue(finder, text); await idle(); }); } Future updateEditingValue(Finder finder, String text) async { return TestAsyncUtils.guard(() async { final editor = state( find.descendant( of: finder, matching: find.byType(RawEditor, skipOffstage: finder.skipOffstage), matchRoot: true), ); testTextInput.updateEditingValue(TextEditingValue( text: text, selection: TextSelection.collapsed( offset: editor.textEditingValue.text.length))); await idle(); }); } }