我不明白 Flutter 中 Theme class 的意义
I don't understand the point of the Theme class in Flutter
所以我正在使用 Flutter,我需要一个用于 ListView 的自定义小部件,其中每个小部件都有基于某些数据的自己的主题。
正确的做法应该是这样的:
class CustomWidget extends StatefulWidget {
CustomWidget({Key key, this.data}) : super(key: key);
final Color data;
@override
_CustomWidgetState createState() => _CustomWidgetState();
}
class _CustomWidgetState extends State<CustomWidget> {
@override
Widget build(BuildContext context) {
return Theme(
data: ThemeData(primaryColor: widget.data),
child: Builder(builder: (context) {
return Container(
color: Theme.of(context).primaryColor,
);
}),
);
}
}
但是我这样做的话,到底有什么好处呢?
具体在容器中应用颜色?为什么我不能只做 color: widget.data
?
如果 TextTheme
之类的东西自动应用于 Theme()
的每个 Text()
颓废,那不是更有意义吗?
ThemeData
用于配置 Theme 或 MaterialApp 小部件:
https://api.flutter.dev/flutter/material/ThemeData-class.html
primaryColor
值不影响 Text
小部件的颜色,来自 docs:
The background color for major parts of the app (toolbars, tab bars, etc)
如果你想改变文本的颜色,那么你可以使用 textTheme
属性:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
accentColor : Colors.black,
textTheme: TextTheme(bodyText2: TextStyle(color: Colors.purple)),
primaryColor : Colors.black
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
primaryColor
: 用于appbar
accentColor
: 用于前景着色
textTheme
:将更改文本的颜色和样式
工作示例:
https://dartpad.dartlang.org/bba537def9dbfa771400309a4e6415ed
所以我正在使用 Flutter,我需要一个用于 ListView 的自定义小部件,其中每个小部件都有基于某些数据的自己的主题。
正确的做法应该是这样的:
class CustomWidget extends StatefulWidget {
CustomWidget({Key key, this.data}) : super(key: key);
final Color data;
@override
_CustomWidgetState createState() => _CustomWidgetState();
}
class _CustomWidgetState extends State<CustomWidget> {
@override
Widget build(BuildContext context) {
return Theme(
data: ThemeData(primaryColor: widget.data),
child: Builder(builder: (context) {
return Container(
color: Theme.of(context).primaryColor,
);
}),
);
}
}
但是我这样做的话,到底有什么好处呢?
具体在容器中应用颜色?为什么我不能只做 color: widget.data
?
如果 TextTheme
之类的东西自动应用于 Theme()
的每个 Text()
颓废,那不是更有意义吗?
ThemeData
用于配置 Theme 或 MaterialApp 小部件:
https://api.flutter.dev/flutter/material/ThemeData-class.html
primaryColor
值不影响 Text
小部件的颜色,来自 docs:
The background color for major parts of the app (toolbars, tab bars, etc)
如果你想改变文本的颜色,那么你可以使用 textTheme
属性:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
accentColor : Colors.black,
textTheme: TextTheme(bodyText2: TextStyle(color: Colors.purple)),
primaryColor : Colors.black
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
primaryColor
: 用于appbar
accentColor
: 用于前景着色
textTheme
:将更改文本的颜色和样式
工作示例:
https://dartpad.dartlang.org/bba537def9dbfa771400309a4e6415ed