how to shift the hint text to border while text field is selected? For example, in this picture hint text 'email or phone' gets shifted to border
FloatingLabelBehavior is the property you are looking for. Just set the floatingLabelBehavior of your TextFormField to floatingLabelBehavior.always. (https://api.flutter.dev/flutter/material/InputDecoration/floatingLabelBehavior.html)
Related
I'm working on a Markdown editor in Flutter, built on top of the TextField widget.
A feature I want to implement is configurable spacing between paragraphs (i.e. after newlines), so that the user doesn't need hit return twice and manually insert an empty line between paragraphs, as is required by Markdown. Instead, I want to create the illusion of an empty line by increasing the space between paragraphs and automatically insert them during export.
If you've used Notion before, it does something similar. So does MarkText.
How would that be accomplished in Flutter? Can it be done with the out-of-the-box TextField, or do I need to implement a custom solution around EditableText?
I've messed around with the height property of the TextField's TextStyle style and StrutStyle strutStyle properties, but both seem to affect the text at the line level, so what I get is the same as, say, changing the line spacing in a Word document. Not what I'm going for.
What you can do is listen to the TextField changes, and detect the enter/return press, and you can do that using the built-in onChanged Listener, so you can create a TextField with a TextEditingController, and in the onChanged handler, you can detect the press by checking if the string finishes by \n, and here you can manipulate your string as you want, i.e. you can add empty lines by appending another \n.
Example:
TextEditingController co = TextEditingController();
TextField(
maxLines: 100,
controller: co,
onChanged: (val){
if(val.endsWith('\n')){
co.text = co.text+'\n'; //append new line
co.selection = TextSelection.fromPosition(TextPosition(offset: co.text.length));//set the pointer at the end of the string
}
},
),
How to set position label in TextFormField in outlineborder?
i want set text position. Because, label prefer to bottom not center in border
According to the documentation for the label
Text that describes the input field.
When the input field is empty and unfocused, the label is displayed on
top of the input field (i.e., at the same location on the screen where
text may be entered in the input field). When the input field receives
focus (or if the field is non-empty), the label moves above (i.e.,
vertically adjacent to) the input field.
So, basically this is the behavior for the label. If you want something else you have to make it on your own ( using a Stack widget with a TextField and a Text ). But with this solution you have to treat the focus properties as well on your own.
You can use this post as a reference
https://stackoverflow.com/a/58039585/10143503
Hey I have a TextField and a controller for it through which I access its current text value and add some text like (Some Special Asterix or text with angular brackets just like hashnode's text editor) to it when needed, adding text at the end is easy.
controller.text += "Something";
The above code will add Something to the end. But I need to know the current TextFields Cursor position and add text according to it.
I really love to know how we can do it in flutter efficiently
Try this to get the cursor position
print(controller.selection.baseOffset);
print(controller.selection.extentOffset);
if they are the same, it is current cursor position.
if not, it means that some of text is selected, baseOffset is start position and extentOffset is end positon.
I am trying to add line numbers to text field on Flutter, like on any text editors. I have text that overflows to next line, so I want to show where lines start and end.
First way that came to my mind was to separate the screen into two columns, one for line numbers on left and one for right for the textfield. However, due to screen size differences, I can't know when a line will overflow.
Is there any more formal way to do it?
First, initialize a List of TextField and an currentLine integer variables. TextField must contain properties named textInputAction and onEditingComplete. So each time you press enter, it is considered as finished with current TextField, creating a new TextField and add it into List of TextField and will move the focus to the new TextField. Line numbers will be coming from inputDecoration of each TextField and the value will be from currentLine variable. curentLine++ also ran inside onEditingComplete.
Check out this article about LineMetrics.
As you can see, this gives you a list of metadata concerning your rendered text lines. Using the line numbers and the hardBreak attribute together, you can compute the line numbers to display in the left hand column.
you can use TextSelection()
TextSelection selection = TextSelection(baseOffset: 0, extentOffset: text.length);
List<TextBox> boxes = textPainter.getBoxesForSelection(selection);
int numberOfLines = boxes.length;
get numberOfLines in your Text, count, and show for each line.
In Visio 2013, I have a connector that is in a container that has a gray background color. I successfully changed the background color of the text block by following these steps:
Double-click the connector
Expand the font options by clicking on the icon in the lower-right portion of the 'Home > Font' ribbon area
Click on 'Text Block' tab in the 'Text' dialog
Select 'Solid color' and choose the background color that matches the gray container background color
That works as expected - my text background color is no longer the default white; it now matches the background color of the container.
However, I want to add spacing to the left and right of the text. I tried increasing the margins in the same 'Text Block' tab of the 'Text' dialog mentioned above. This increased the margins but did not extend the background color of the text. A also tried manually adding spaces to the left and right of the text. The leading spaces worked, but the trailing spaces where truncated. Is there any way to add left and right padding to the text (similar to css padding)?
Modifying the text block location/size may give you what you want, combined with text margins.
To modify the text block location, you have to click the text block tool, which is on a dropdown with the text tool (at least in Visio 2003).
I know this is an old question, but I had the same question myself and wasn't able to (quickly) find an answer out there either. I finally hit upon a trick that'll get the result we're looking for:
Instead of spaces, add leading and trailing characters to the longest line in the text box. (I use ".")
Change the color of ONLY those added characters so it matches the text box's background.
The text box's background reaches to the furthest edge of the text within, and we're just using that to get what we want. Since it's just moving the edge indirectly, I consider it a "trick" that we can use instead of a "fix".
Quick list of Cons:
The text box background color has to be solid, or close to it.
The "invisible" text will still exist, so it'll show up in a copy/paste of the text.
Similarly, it may make Searching/CTRL+F for things within the document/file more difficult.
You can use No-Break Space. Insert it from Insert > Symbol.