appflowy-editor/test/customer/text_field_and_editor_test.dart
2023-09-15 10:13:49 +02:00

75 lines
2.2 KiB
Dart

import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() async {
// column
// - text field
// - editor
// 1. When the text field is focused, the editor's cursor should be disabled.
// 2. When the editor is focused, the text field's cursor should be disabled.
// 3. Tapping a non-first line of the editor should still allow the editor to grab focus.
await AppFlowyEditorLocalizations.load(
const Locale.fromSubtags(languageCode: 'en'),
);
testWidgets('text field + editor', (tester) async {
final widget = TextFieldAndEditor();
await tester.pumpWidget(widget);
await tester.pumpAndSettle();
final textField = find.byType(TextField);
await tester.tap(textField);
await tester.pumpAndSettle();
expect(widget.focusNode.hasFocus, true);
expect(widget.editorFocusNode.hasFocus, false);
final editor = find.byType(AppFlowyEditor);
await tester.tapAt(tester.getCenter(editor));
await tester.pumpAndSettle();
expect(widget.focusNode.hasFocus, false);
expect(widget.editorFocusNode.hasFocus, true);
});
}
class TextFieldAndEditor extends StatelessWidget {
TextFieldAndEditor({
super.key,
});
final controller = TextEditingController();
final focusNode = FocusNode();
final editorFocusNode = FocusNode();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextField(
controller: controller,
focusNode: focusNode,
),
Expanded(
child: Container(
width: 500,
decoration: BoxDecoration(
border: Border.all(color: Colors.blue),
),
child: AppFlowyEditor(
focusNode: editorFocusNode,
editorState: EditorState.blank(),
editorStyle: const EditorStyle.mobile(),
),
),
),
],
),
),
),
);
}
}