The problem is 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.
Add Material
widget as root element.
@override
Widget build(BuildContext context) {
return Material(
type: MaterialType.transparency,
child: new Container(
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(),
),
);
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.
您也可以使用装饰:TextDecoration.none 删除下划线
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.
Inside your Text Widget
, use the style
property and set decoration
to null
like shown:
Text(
"hello world",
style: TextStyle(
decoration: TextDecoration.none
),
)
This will remove the yellow lines under the text.
You should add Material and Scaffold widgets in main.dart file
MaterialApp(
home: Scaffold(
body: Text('Hello world'),
),
);
2 ways is avalible:
use scaffuld in parent of screen
Scaffold(body: Container(child:Text("My Text")))
use material for parent of widget
Material(child: Text("My Text"))
You just need to add Material root widget.
@override
Widget build(BuildContext context) {
return Material(
child: new Container(),
);
}
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.
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!
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.
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),
),
)
],
),
);
}
}
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')),
),
),
);
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
.
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.
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,
);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.