在画布上展开可编辑文本

时间:2018-05-30 15:11:45

标签: dart flutter

我正在尝试将一个可编辑的文本框添加到Flutter中的画布,这将在选中后调出键盘。

我正在使用自定义画家将文本打印到画布上(如下面的代码所示)。是否可以使此文本可编辑,或在画布上以特定偏移量添加文本输入元素?

import 'package:flutter/material.dart' as Material;

class CanvasPainter extends Material.ChangeNotifier implements Material.CustomPainter {
..

void paint(Canvas canvas, Size size) {

      Material.TextSpan textSpan = new Material.TextSpan(style: new material.TextStyle(color: new Maaterial.Color.fromRGBO(r, g, b, 1.0), fontSize: font.fontSize.toDouble(), fontFamily: 'Roboto'),text: "Hello there");
      Material.TextPainter tp = new Material.TextPainter( text: textSpan, textAlign: TextAlign.left, textDirection: TextDirection.ltr, textScaleFactor: ratio);
      tp.layout();
      tp.paint(canvas, new Offset(50.0,50.0));
}

}

1 个答案:

答案 0 :(得分:0)

不是最好的解决方案,但我可以用 OverlayEntry 解决类似的问题。

步骤:

  1. 创建一个 OverlayEntry,使用 FocusNode 和 TextEditController 将一个(隐藏的)TextField 放入其中。
  2. 添加覆盖条目后,请求焦点在 focusNode 上,因此键盘将打开。
  3. 向 TextField 添加一个 onChanged,并在文本更改时以某种方式通知画家(例如 valueNotifier)。
  4. 在 TextPainer 中使用 TextEditController.text 值