我试图在flutter中使用textField接受用户输入,但我想将其作为项目符号列表。我想我可能需要使用一个名为flatter_markdown的软件包,但我仍然不知道该怎么做。就像最后一行应该自动以一个项目符号开头一样。
这样做的一种方法是。
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
TextEditingController tc = TextEditingController();
int currentTextLength = 0;
@override
Widget build(BuildContext context) {
return TextField(
maxLines: 4,
controller: tc,
onChanged: (String newText){
if(newText[0] != '•'){
newText = '• ' + newText;
tc.text = newText;
tc.selection = TextSelection.fromPosition(TextPosition(offset: tc.text.length));
}
if(newText[newText.length - 1] == 'n' && newText.length > currentTextLength){
tc.text = newText + '• ';
tc.selection = TextSelection.fromPosition(TextPosition(offset: tc.text.length));
}
currentTextLength = tc.text.length;
}
);
}
}
注意:这不是一个完美的解决方案。因为如果您开始在现有文本的中间编辑文本,它不会放置项目符号。但也许这可以给你一个方向的开始。
如果您想要一个文本字段的项目符号列表,flatter_markdown可能不适合您。因为它显示了一个标记文本。
TextFormField(
decoration: InputDecoration(
border: InputBorder.none, prefix: Text("."), // Or a Dot image
),
),
如果你想要一个具有项目符号功能的文本字段,这个包可能适合你:
https://pub.dev/packages/zefyr
如果你自己写的话就很复杂了。
看看它的示例代码来学习如何使用:
https://github.com/memspace/zefyr/tree/master/packages/zefyr/example/lib
您可以尝试一下!!https://blog.calcont.in/2023/05/how-to-automatically-add-list-in-next.html
- 如果在当前行的开头有连字符,则自动在下一行添加连字符
- 它不仅会检查文本的最后一行,而且也适用于中间的任何一行