Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 356 Vote(s) - 3.55 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Flutter how do I remove unwanted padding from Text widget?

#1
I have a `Text` widget and not sure why it seems to just have padding at the top and bottom even though I didn't set any in the code. This is from the default Flutter app, I just modified the font size.

body: Center(
child: Column(
children: <Widget>[
Text(
'0:00.00',
style: TextStyle(fontSize: 76),
),
],
),
),

This is a screenshot of the highlighted `Text` widget in Android Studio. There's really nothing else adding any padding so I don't know why it's there.

[![enter image description here][1]][1]

Sometimes you get this in CSS where there is padding even though none was set but you can remove it simply with `padding: 0` but I don't see how to do it here since I can't find a padding option for the `Text` widget.

EDIT: The amount of padding changes with the size of the font. It seems to always contain a certain amount of padding, like a html `H1` tag.


[1]:
Reply

#2
There are 2 potential reasons:

- The fontFamily - try commenting it out and see if you still have the same problem. If this is the reason and you absolutely must/want to use this specific font, I'm not sure what the fix is, apart from some horrible logic to stack widgets accordingly so that it looks like there's no padding.

- Layout constraints from the parent Widgets - you only included the code of the Text widget, but if for example it's wrapped in an Expanded widget within a Column, that would also explain the extra height (possibly wrong assumption here because the text wouldn't center itself vertically by default anyway, but then there might be a DefaultTextStyle widget up in the hierarchy somewhere so still possible....)


Edit: It seems like there is some default padding around the text.

I found that you can reduce the top padding by setting a TextStyle with a height lower than 1. The value required seems to depend on the font size and the text itself, as different characters have different heights.

You can also reduce the bottom padding by clipping the Text using a fixed size Container. This will also vary based on the font size and the text itself. Below is an example of using both of these to reduce the top and bottom padding to 0 for the text '0:00.00' of font size 72:

ClipRect(
child: Container(
height: 55,
child: Text("0:00.00",
style: TextStyle(
fontSize: 72,
height: 0.80,
),
),
),
),

I know this is a very poor solution, but I don't know of any better one. I tried using a custom StrutStyle on the Text widget, but that didn't help either.
Reply

#3
Try playing with line height of the text by setting height in style property. Height of the text is determined based on font size. It will multiply the font size and give you the space that will look like it has some padding. The line height of the text is also linked to the font itself, since every font has it own line height.

child: Text(
'Some text goes here',
style: TextStyle(
fontSize: 25.0,
height: 1,
),
)

Reply

#4
There are reasons why the `Text` widget has this "padding". Take in consideration the next example:

Text(
'123 gyÓ',
style: TextStyle(
fontSize: 40.0,
),
),

[![enter image description here][1]][1]

As we can see, using another characters like the letters g and y and an uppercase O with an accent marker, shows us that there's no padding on the `Text` widget really.

Fonts have *ascenders* and *descenders* on some characters, and there's also en *ascent line* for special characters like the *accent marker*. That's why numbers are centered in the middle. That's not padding on Flutter side, but *typography design*(?). Maybe you could find a way to sort your issue, by looking for a font without ascenders and descenders.

More info about fonts on [Wikipedia](

[To see links please register here]

)

Conclusion: if you want to select the `Text` widget with the Flutter inspector, and see no space around some characters, that is not possible.


[1]:
Reply

#5
I found the solution myself in the end. It can be positioned using `Stack` and `Row` widgets. I found `Row` works better than using `Positioned` as the text can be centred using the `Row` widgets.

body: Stack(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'0:00.00',
style: TextStyle(fontSize: 76),
),
],
),
Padding(
padding: EdgeInsets.only(top: 56.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Coke',
style: TextStyle(fontSize: 76),
),
],
),
),
],
)

It kind of works like the negative padding in CSS but actually it's the padding that moves the bottom text down rather than up since otherwise they occupy the same space.

[![enter image description here][1]][1]


[1]:
Reply

#6
After googling a while, I've written this.
What does it do? It's shifting down the position of the text
(not shrinking)

import 'package:vector_math/vector_math_64.dart';
import 'package:flutter/material.dart';

class BaselineText extends StatefulWidget {
final Widget child;
BaselineText({this.child});

@override
_BaselineTextState createState() => _BaselineTextState();
}

class _BaselineTextState extends State<BaselineText> {
GlobalKey _key = GlobalKey();

void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {}));
}

@override
Widget build(BuildContext context) {
final RenderBox renderBox = _key.currentContext?.findRenderObject();
final height = renderBox?.size?.height ?? 0;
return Baseline(
baseline: 0,
baselineType: TextBaseline.ideographic,
key: _key,
child: Transform(
transform: Matrix4.translation(
Vector3(0, height, 0),
),
child: widget.child,
),
);
}
}


How to use:

BaselineText(
child: Text("something"),
)

**DONE!!!**
Reply

#7
The proper way you can get rid of the unwanted padding is by setting the `height` property in the `TextStyle`. With this you set the height for each line.


Text(
"Let's make\nsome pancakes",
style: TextStyle(
height: 1.2, //SETTING THIS CAN SOLVE YOUR PROBLEM
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.w300,
),
textAlign: TextAlign.center,
),


In fact, we can confirm from the docs that:

> For most fonts, setting height to 1.0 is not the same as omitting or setting height to null because the fontSize sets the height of the EM-square, which is different than the font provided metrics for line height.

For more info:

[To see links please register here]


So give it a try. It worked for me.
Reply

#8
I think I found a good solution/workaround for removing both top and bottom padding.

The trick is to put your Text in a Container and then change the `height` of your `TextStyle` inside the `Text`, as well as the height of your `Container`. It's a bit of going back and forth for the perfect measurements but it's worth it imo.

Here's an example from my own code.

[![enter image description here][1]][1]

```dart
Container(
height: 24,
child: Text(
'Auto',
style: TextStyle(
height: 0.77,
fontSize: 32,
fontWeight: FontWeight.bold,
color: Colors.white,
),
textAlign: TextAlign.center,
),
```


[1]:
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through