我可以使用此代码在光标之前和之后打印出all文本:
controller = TextEditingController();
final selection = controller.value.selection;
final text = controller.value.text;
print("\nBEFORE\n${selection.textBefore(text)}");
print("\nAFTER\n${selection.textAfter(text)}\n");
如何使用TextEditingController
仅查找光标之前/之后的文本与光标在同一行?
例如,我想使用TextEditingController
查询光标当前位置之前/之后的文本,因此之前的文本为“ lin”,而光标之后的文本为“ e2 contents”(在上图中)。
完整的应用程序代码,它在光标之前/之后获得all文本(与要求不在同一行):
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: TextFieldApp()));
class TextFieldApp extends StatefulWidget {
@override
_TextFieldAppState createState() => _TextFieldAppState();
}
class _TextFieldAppState extends State<TextFieldApp> {
TextEditingController controller;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: TextField(
keyboardType: TextInputType.multiline,
controller: controller,
maxLines: 10,
maxLength: null,
),
);
}
@override
void dispose() {
super.dispose();
}
@override
void initState() {
controller = TextEditingController();
controller.text = 'line 1\nline2 contents\nline3';
controller.addListener(() {
final selection = controller.value.selection;
final text = controller.value.text;
print("\nBEFORE\n${selection.textBefore(text)}");
print("\nAFTER\n${selection.textAfter(text)}\n");
});
super.initState();
}
}
您可以将文本除以\n
,然后从数组中获取最后一个值。同样,此文本之后的第一个条目。
final selection = controller.value.selection;
final text = controller.value.text;
final before = selection.textBefore(text);
final after = selection.textAfter(text);
print(before.split('\n').last);
print(after.split('\n').first);
注意:
如果用户在内容为cont
的行中选择line2 contents
,则为
line2 //before
ents //after