mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 18:15:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:appflowy_editor/appflowy_editor.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| import 'package:flutter_test/flutter_test.dart';
 | |
| 
 | |
| extension IME on WidgetTester {
 | |
|   IMESimulator get ime => IMESimulator(this);
 | |
| }
 | |
| 
 | |
| class IMESimulator {
 | |
|   IMESimulator(this.tester) {
 | |
|     client = findTextInputClient();
 | |
|   }
 | |
| 
 | |
|   final WidgetTester tester;
 | |
|   late final TextInputClient client;
 | |
| 
 | |
|   Future<void> insertText(String text) async {
 | |
|     for (final c in text.characters) {
 | |
|       await insertCharacter(c);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   Future<void> insertCharacter(String character) async {
 | |
|     final value = client.currentTextEditingValue;
 | |
|     if (value == null) {
 | |
|       assert(false);
 | |
|       return;
 | |
|     }
 | |
|     final text = value.text
 | |
|         .replaceRange(value.selection.start, value.selection.end, character);
 | |
|     final textEditingValue = TextEditingValue(
 | |
|       text: text,
 | |
|       selection: TextSelection.collapsed(
 | |
|         offset: value.selection.baseOffset + 1,
 | |
|       ),
 | |
|     );
 | |
|     client.updateEditingValue(textEditingValue);
 | |
|     await tester.pumpAndSettle();
 | |
|   }
 | |
| 
 | |
|   TextInputClient findTextInputClient() {
 | |
|     final finder = find.byType(KeyboardServiceWidget);
 | |
|     final KeyboardServiceWidgetState state = tester.state(finder);
 | |
|     return state.textInputService as TextInputClient;
 | |
|   }
 | |
| }
 | 
