N.K*_*K.T 3 themes dart flutter
我需要color根据主题更改小部件。我有ThemeData明暗主题分开。现在是否可以添加自定义属性,ThemeData以便我可以根据主题更改小部件的颜色并使用该自定义属性?
Nik*_*hin 12
Flutter 最近引入了ThemeExtensions(感谢@guilherme-matuella的PR 链接!)
通过以下主要 Flutter 存储库中的示例,您可以很好地了解如何使用该功能:
return MaterialApp(
title: MyApp._title,
theme: ThemeData.light().copyWith(
extensions: <ThemeExtension<dynamic>>[
const MyColors(
brandColor: Color(0xFF1E88E5),
danger: Color(0xFFE53935),
),
],
),
darkTheme: ThemeData.dark().copyWith(
extensions: <ThemeExtension<dynamic>>[
const MyColors(
brandColor: Color(0xFF90CAF9),
danger: Color(0xFFEF9A9A),
),
],
),
themeMode: isLightTheme ? ThemeMode.light : ThemeMode.dark,
home: Home(
isLightTheme: isLightTheme,
toggleTheme: toggleTheme,
),
);
Run Code Online (Sandbox Code Playgroud)
您稍后可以在小部件中检索它,如下所示:
final MyColors myColors = Theme.of(context).extension<MyColors>();
ThemeData我们可以通过函数进行扩展,而不是添加自定义属性extension。例如,如果我们需要颜色的自定义属性,我们可以extension在 上添加函数ColorScheme。Color依赖项现已移至Themedata.
// checking brightness to support dynamic themeing
extension CustomColorSchemeX on ColorScheme {
Color get smallBoxColor1 =>
brightness == Brightness.light ? Colors.blue : Colors.grey[400];
}
Run Code Online (Sandbox Code Playgroud)
然后通过访问该属性Theme.of(context)...
Container(
decoration: BoxDecoration(
border: Border.all(
color: Theme.of(context)
.colorScheme
.smallBoxColor1),
),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |