Reputation: 5311
The main app screen doesn't have this issue, all the texts show up as they should.
However, in the new screen, all the text widget have some weird yellow line / double-line underneath.
Any ideas on why this is happening?
Upvotes: 366
Views: 159049
Reputation: 85
It could also happen if you add MaterialApp more than once. Example is when you have MaterialApp in the Main widget and also in a sub widget. The sub widget will have to problem talked about but the main widget will display text as normal.
Upvotes: 0
Reputation: 277677
The problem is not having a Scaffold
or not.
Scaffold
is a helper for Material
apps (AppBar
, Drawer
, that sort of stuff). But you're not forced to use Material
.
What you're missing is an instance of DefaultTextStyle
as a parent:
DefaultTextStyle(
style: TextStyle(...),
child: Text('Hello world'),
)
Various widgets add one to change the default text theme, such as Scaffold, Dialog, AppBar, ListTile, ...
It's DefaultTextStyle
that allows your app-bar title to be bold by default for example.
Upvotes: 431
Reputation: 1
wrap your build widget with Material widget
@override Widget build(BuildContext context) { return Material ( ... );
it will fix the text yellow underline issue
Upvotes: 0
Reputation: 746
Try wrapping your widget with Material widget like a below:
Material(color: Colors.white, child: YourWidget())
Upvotes: -1
Reputation: 180
Use a DefaultTextStyle() widget to set the textstyle of your text.
DefaultTextStyle(
style: kTempTextStyle,
child: Text('Hello world'),
)
you can give your own textstyle as you want.
const kTempTextStyle = TextStyle(
fontFamily: 'Spartan MB',
fontSize: 100.0,
decoration: null,
);
Upvotes: 1
Reputation: 2069
I recommend this approach because you could do it once and it will override your whole app.
Add DefaultTextStyle
under builder
of our MaterialApp
like so:
child: MaterialApp(
...
...
theme: yourThemeData,
builder: (context, child) => DefaultTextStyle(
style: yourThemeData.textTheme.bodyText1,
child: child,
),
),
By doing so we don't need to specify a style
or having DefaultTextTheme
every time we want to use showDialog
or Overlay
.
Upvotes: 1
Reputation: 268454
All you need to do is provide a Material
widget, or a Scaffold
which internally covers this widget. You can do that in the following ways:
Material
(simple and better):Material(
color: Colors.transparent, // <-- Add this, if needed
child: Text('Hello'),
)
Text.style
property:Text(
'Hello',
style: TextStyle(decoration: TextDecoration.none), // Set this
)
Scaffold
:Scaffold(body: Text('Hello'))
Fixing yellow text issues when using Hero
:
As aaronvargas mentioned, you can wrap your child
in Material
when using Hero
on both sides. For example:
Hero(
tag: 'fooTag',
child: Material( // <--- Provide Material
type: MaterialType.transparency,
child: YourWidget(),
),
);
Upvotes: 125
Reputation: 33
You can also have your scaffold as the home for your MaterialApp. This worked for me.
return MaterialApp(
home: Scaffold(
body: Container(
child: SingleChildScrollView(child: Text('Test')),
),
),
);
Upvotes: 1
Reputation: 7451
Before
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
"21:34",
style: TextStyle(fontSize: 50),
),
),
Center(
child: Text(
"Wakey - wakey",
style: TextStyle(fontSize: 20),
),
)
],
);
}
After (Solution):
Here Wrap the current top or parent widget with Scaffold
widget
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
"21:34",
style: TextStyle(fontSize: 50),
),
),
Center(
child: Text(
"Wakey - wakey",
style: TextStyle(fontSize: 20),
),
)
],
),
);
}
Full code:Dartpad or Live code
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: sta()));
class sta extends StatefulWidget {
const sta({Key? key}) : super(key: key);
@override
State<sta> createState() => _staState();
}
var isShow = false;
class _staState extends State<sta> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text(
"21:34",
style: TextStyle(fontSize: 50),
),
),
Center(
child: Text(
"Wakey - wakey",
style: TextStyle(fontSize: 20),
),
)
],
),
);
}
}
Upvotes: 5
Reputation: 5993
The text has a hidden default text style .The problem arises because you can't provide this to any parent widget like Scaffold. Text widget takes the default style. for your solution either you can change the DefaultTextStyle like this.
DefaultTextStyle(
style: TextStyle(),
child: yourTextWidget,
);
or just wrap into Scaffold, Scaffold is a widget. that provides scaffolding for pages in your app. like this
MaterialApp(
home: Scaffold(
body: Text('Wakey Wakey!'),
),
);
for more info just walk through this Flutter Official video.
Yellow underline text | Decoding Flutter
Upvotes: 0
Reputation: 2257
The yellow lines come from _errorTextStyle. The documentation states that you should define a DefaultTextStyle
parent (or use Material
, which does this for you):
MaterialApp uses this TextStyle as its DefaultTextStyle to encourage developers to be intentional about their DefaultTextStyle.
In Material Design, most Text widgets are contained in Material widgets, which sets a specific DefaultTextStyle. If you're seeing text that uses this text style, consider putting your text in a Material widget (or another widget that sets a DefaultTextStyle).
Developing Flutter apps without material is not something most people do, but if that's your use case, you should use DefaultTextStyle
.
Contrary to the accepted answer, Theme
does not set a DefaultTextStyle
, so it does not solve your problem. Scaffold
does solve the problem, as it contains Material
, which in turn defines DefaultTextStyle
, but Scaffold
is a bit more than you need for a Dialog
, Hero
, etc.
To permanently solve this for your whole app, you could set the DefaultTextStyle
in your MaterialApp
builder
. This solves the issue for all the components of your app, not just the current screen you're working on.
Upvotes: 2
Reputation: 8686
problem: your widget doesn't have default text style,
solution: wrap it in one!
DefaultTextStyle(
style: TextStyle(),
child: yourWidget,
);
remember if you dont set any color, default text color is white!
Upvotes: 2
Reputation: 2680
Text style has a decoration argument that can be set to none
Text("My Text",
style: TextStyle(
decoration: TextDecoration.none,
)
);
Also, as others have mentioned, if your Text widget is in the tree of a Scaffold or Material widget you won't need the decoration text style.
Upvotes: 49
Reputation: 208
You just need to add Material root widget.
@override
Widget build(BuildContext context) {
return Material(
child: new Container(),
);
}
Upvotes: 4
Reputation: 45
There is an other solution for this , especially if you are using multiple pages wrapped under main.dart file You can do something like this:
child: MaterialApp(
home: Material(child: Wrapper()),
),
This will remove the yellow lines under text that is present in any pages referenced/used under wrapper.
Upvotes: 2
Reputation: 1684
Just adding another way I encounter to these answers.
Wrap the root Widget around a DefaultTextStyle widget. Altering each Text widget is not a necessity here.
DefaultTextStyle(
style: TextStyle(decoration: TextDecoration.none),
child : Your_RootWidget
)
Hope it helps someone.
Upvotes: 18
Reputation: 727
Also you can use decoration: TextDecoration.none to remove underline
Upvotes: 17
Reputation: 644
You should add Material and Scaffold widgets in main.dart file
MaterialApp(
home: Scaffold(
body: Text('Hello world'),
),
);
Upvotes: 8
Reputation: 2789
Add Material
widget as root element.
@override
Widget build(BuildContext context) {
return Material(
type: MaterialType.transparency,
child: new Container(
Upvotes: 197