0Day Forums
Flutter how do I remove unwanted padding from Text widget? - Printable Version

+- 0Day Forums (https://zeroday.vip)
+-- Forum: Coding (https://zeroday.vip/Forum-Coding)
+--- Forum: Flutter & Dart (https://zeroday.vip/Forum-Flutter-Dart)
+--- Thread: Flutter how do I remove unwanted padding from Text widget? (/Thread-Flutter-how-do-I-remove-unwanted-padding-from-Text-widget)



Flutter how do I remove unwanted padding from Text widget? - janetaylfkakd - 07-21-2023

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]:



RE: Flutter how do I remove unwanted padding from Text widget? - amperometric426403 - 07-21-2023

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.


RE: Flutter how do I remove unwanted padding from Text widget? - featurettes415027 - 07-21-2023

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,
),
)




RE: Flutter how do I remove unwanted padding from Text widget? - eulogia126 - 07-21-2023

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]:



RE: Flutter how do I remove unwanted padding from Text widget? - Projohnathandxfbxnxegk - 07-21-2023

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]:



RE: Flutter how do I remove unwanted padding from Text widget? - treesxjnhlco - 07-21-2023

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!!!**



RE: Flutter how do I remove unwanted padding from Text widget? - hiltless405285 - 07-21-2023

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.


RE: Flutter how do I remove unwanted padding from Text widget? - suva351156 - 07-21-2023

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]: