[英]Yellow lines under Text Widgets in Flutter?
问题是有没有Scaffold
。 Scaffold
是Material
应用程序( AppBar
、 Drawer
之类的)的助手。 但是您不必被迫使用Material
。
您缺少的是作为父级的DefaultTextStyle
实例:
DefaultTextStyle(
style: TextStyle(...),
child: Text('Hello world'),
)
各种小部件添加一个以更改默认文本主题,例如 Scaffold、Dialog、AppBar、ListTile、...
例如,它是DefaultTextStyle
,它允许您的应用栏标题默认为粗体。
将Material
小部件添加为根元素。
@override
Widget build(BuildContext context) {
return Material(
type: MaterialType.transparency,
child: new Container(
您需要做的就是提供一个Material
小部件,或者一个内部覆盖该小部件的Scaffold
。 您可以通过以下方式做到这一点:
Material
(简单且更好): Material( color: Colors.transparent, // <-- Add this, if needed child: Text('Hello'), )
Text.style
属性: Text( 'Hello', style: TextStyle(decoration: TextDecoration.none), // Set this )
Scaffold
: Scaffold(body: Text('Hello'))
修复使用Hero
时的黄色文本问题:
正如aaronvargas 所提到的,您可以在两侧使用Hero
时将您的child
包裹在Material
中。 例如:
Hero(
tag: 'fooTag',
child: Material( // <--- Provide Material
type: MaterialType.transparency,
child: YourWidget(),
),
);
文本样式有一个可以设置为无的装饰参数
Text("My Text",
style: TextStyle(
decoration: TextDecoration.none,
)
);
此外,正如其他人所提到的,如果您的 Text 小部件位于 Scaffold 或 Material 小部件的树中,则您不需要装饰文本样式。
您也可以使用装饰:TextDecoration.none 删除下划线
只是在这些答案中添加我遇到的另一种方式。
将根 Widget 包裹在DefaultTextStyle小部件周围。 在这里更改每个 Text 小部件不是必需的。
DefaultTextStyle(
style: TextStyle(decoration: TextDecoration.none),
child : Your_RootWidget
)
希望它可以帮助某人。
在Text Widget
,使用style
属性并将decoration
设置为null
如下所示:
Text(
"hello world",
style: TextStyle(
decoration: TextDecoration.none
),
)
这将删除文本下方的黄线。
您应该在 main.dart 文件中添加 Material 和 Scaffold 小部件
MaterialApp(
home: Scaffold(
body: Text('Hello world'),
),
);
2种方式可用:
在屏幕的父级中使用脚手架
Scaffold(body: Container(child:Text("My Text")))
使用材质作为小部件的父级
Material(child: Text("My Text"))
您只需要添加 Material 根小部件。
@override
Widget build(BuildContext context) {
return Material(
child: new Container(),
);
}
对此还有其他解决方案,特别是如果您使用包含在main.dart文件下的多个页面,您可以执行以下操作:
child: MaterialApp(
home: Material(child: Wrapper()),
),
这将删除在包装器下引用/使用的任何页面中存在的文本下的黄线。
问题:您的小部件没有默认文本样式,
解决方案:把它包在一个!
DefaultTextStyle(
style: TextStyle(),
child: yourWidget,
);
请记住,如果您不设置任何颜色,则默认文本颜色为白色!
黄线来自_errorTextStyle 。 文档说明您应该定义一个DefaultTextStyle
父级(或使用Material
,它会为您执行此操作):
MaterialApp 使用这个 TextStyle 作为它的 DefaultTextStyle 来鼓励开发者注意他们的 DefaultTextStyle。
在 Material Design 中,大多数 Text 小部件都包含在 Material 小部件中,它设置了特定的 DefaultTextStyle。 如果您看到使用此文本样式的文本,请考虑将您的文本放入 Material 小部件(或另一个设置 DefaultTextStyle 的小部件)中。
大多数人不会在没有材料的情况下开发 Flutter 应用程序,但如果这是你的用例,你应该使用DefaultTextStyle
。
与接受的答案相反, Theme
没有设置DefaultTextStyle
,因此它不能解决您的问题。 Scaffold
确实解决了这个问题,因为它包含Material
,它又定义了DefaultTextStyle
,但是Scaffold
比你需要的Dialog
、 Hero
等要多一点。
要为您的整个应用永久解决此问题,您可以在MaterialApp
builder
中设置DefaultTextStyle
。 这解决了应用程序所有组件的问题,而不仅仅是您正在处理的当前屏幕。
前
@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),
),
)
],
);
}
之后(解决方案):
这里用Scaffold
小部件包裹当前顶部或父小部件
@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),
),
)
],
),
);
}
完整代码: Dartpad 或 Live 代码
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),
),
)
],
),
);
}
}
您还可以将脚手架作为 MaterialApp 的家。 这对我有用。
return MaterialApp(
home: Scaffold(
body: Container(
child: SingleChildScrollView(child: Text('Test')),
),
),
);
我推荐这种方法,因为你可以这样做一次,它会覆盖你的整个应用程序。
在MaterialApp
的builder
下添加DefaultTextStyle
,如下所示:
child: MaterialApp(
...
...
theme: yourThemeData,
builder: (context, child) => DefaultTextStyle(
style: yourThemeData.textTheme.bodyText1,
child: child,
),
),
通过这样做,我们不需要在每次想要使用showDialog
或Overlay
时指定style
或使用DefaultTextTheme
。
该文本具有隐藏的默认文本样式。出现问题是因为您无法将其提供给任何父小部件,例如Scaffold 。 文本小部件采用默认样式。 对于您的解决方案,您可以像这样更改DefaultTextStyle 。
DefaultTextStyle(
style: TextStyle(),
child: yourTextWidget,
);
或者只是包装成 Scaffold,Scaffold 是一个小部件。 为您的应用程序中的页面提供脚手架。 像这样
MaterialApp(
home: Scaffold(
body: Text('Wakey Wakey!'),
),
);
欲了解更多信息,请浏览这个 Flutter 官方视频。
使用 DefaultTextStyle() 小部件来设置文本的文本样式。
DefaultTextStyle(
style: kTempTextStyle,
child: Text('Hello world'),
)
您可以根据需要提供自己的文本样式。
const kTempTextStyle = TextStyle(
fontFamily: 'Spartan MB',
fontSize: 100.0,
decoration: null,
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.