在文本字段中当前编辑的行上的光标之前/之后获取文本

问题描述 投票:0回答:1

我可以使用此代码在光标之前和之后打印出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仅查找光标之前/之后的文本与光标在同一行

TextField with line of lin<<cursor>>e2 contents

例如,我想使用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();
  }
}
flutter dart
1个回答
0
投票

您可以将文本除以\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
© www.soinside.com 2019 - 2024. All rights reserved.