mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 03:54:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			49 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,
 | 
						|
      ),
 | 
						|
      composing: TextRange.empty,
 | 
						|
    );
 | 
						|
    client.updateEditingValue(textEditingValue);
 | 
						|
    await tester.pumpAndSettle();
 | 
						|
  }
 | 
						|
 | 
						|
  TextInputClient findTextInputClient() {
 | 
						|
    final finder = find.byType(KeyboardServiceWidget);
 | 
						|
    final KeyboardServiceWidgetState state = tester.state(finder);
 | 
						|
    return state.textInputService as TextInputClient;
 | 
						|
  }
 | 
						|
}
 |