mind_map_input.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:flutter/material.dart';
  2. typedef MindMapTextEditDone = Function(String text);
  3. class MindMapTextEdit extends StatefulWidget {
  4. final double inputLeft;
  5. final double inputTop;
  6. final double inputWidth;
  7. final double inputHeight;
  8. final Color inputFillColor;
  9. final bool autoFocus;
  10. final TextSpan? textSpan;
  11. final MindMapTextEditDone textEditDone;
  12. const MindMapTextEdit(
  13. {Key? key,
  14. required this.inputLeft,
  15. required this.inputTop,
  16. required this.inputWidth,
  17. required this.inputHeight,
  18. required this.inputFillColor,
  19. required this.autoFocus,
  20. required this.textSpan,
  21. required this.textEditDone})
  22. : super(key: key);
  23. @override
  24. MindMapState createState() {
  25. return MindMapState();
  26. }
  27. }
  28. class MindMapState extends State<MindMapTextEdit> {
  29. late TextEditingController _controller;
  30. late FocusNode _textNode;
  31. @override
  32. void initState() {
  33. super.initState();
  34. _controller = TextEditingController();
  35. _textNode = FocusNode();
  36. }
  37. @override
  38. Widget build(BuildContext context) {
  39. final text = widget.textSpan?.text ?? ' ';
  40. _controller.text = text;
  41. _controller.selection = TextSelection(baseOffset: text.length, extentOffset: text.length);
  42. if (widget.autoFocus) {
  43. FocusScope.of(context).requestFocus(_textNode);
  44. }else {
  45. FocusScope.of(context).requestFocus(FocusNode());
  46. }
  47. return Positioned(
  48. left: widget.inputLeft,
  49. top: widget.inputTop,
  50. width: widget.inputWidth,
  51. height: widget.inputHeight,
  52. child: widget.autoFocus ? TextField(
  53. focusNode: _textNode,
  54. style: widget.textSpan?.style,
  55. decoration: InputDecoration.collapsed(
  56. hintText: '',
  57. filled: true,
  58. fillColor: widget.inputFillColor), //去除边框
  59. controller: _controller,
  60. textInputAction: TextInputAction.done,
  61. onEditingComplete: () {
  62. debugPrint('onEditing complete.....${_controller.text}');
  63. done();
  64. },
  65. ) : Container()
  66. ,
  67. );
  68. }
  69. @override
  70. void dispose() {
  71. _controller.dispose();
  72. _textNode.dispose();
  73. super.dispose();
  74. }
  75. void done(){
  76. widget.textEditDone(_controller.text);
  77. }
  78. }