Skip to content

Commit b1a9a7d

Browse files
committed
添加暗色模式相关文档
1 parent 5452823 commit b1a9a7d

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

tdesign-component/example/lib/component_test/dark_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Future<void> main() async {
2121
/// 开启多套主题功能
2222
TDTheme.needMultiTheme(true);
2323
/// 默认浅色主题,dark为深色主题
24-
themeData = TDThemeData.fromJson('redLight', themeJsonString, darkName: 'dark') ??
24+
themeData = TDThemeData.fromJson('red', themeJsonString, darkName: 'redDark') ??
2525
TDTheme.defaultData();
2626

2727
runApp(const App());

tdesign-component/lib/src/components/button/td_button.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,13 @@ class _TDButtonState extends State<TDButton> {
171171
_updateParams();
172172
}
173173

174+
@override
175+
void didChangeDependencies() {
176+
super.didChangeDependencies();
177+
_updateParams();
178+
}
179+
180+
174181
@override
175182
Widget build(BuildContext context) {
176183
Widget display = Container(

tdesign-component/lib/src/theme/td_theme.dart

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,10 @@ class TDThemeData extends ThemeExtension<TDThemeData> {
298298
if (themeConfig.containsKey(name)) {
299299
var theme = parseThemeData(name, themeConfig, extraThemeData);
300300
theme.light = theme;
301-
if (darkName?.isNotEmpty ?? false) {
301+
darkName ??= '${name}Dark';
302+
if (themeConfig[darkName] != null) {
302303
// 解析暗色模式
303-
var darkTheme = parseThemeData(darkName!, themeConfig, extraThemeData);
304+
var darkTheme = parseThemeData(darkName, themeConfig, extraThemeData);
304305
darkTheme.light = theme;
305306
theme.dark = darkTheme;
306307
// 填充暗色模式缺失数据
@@ -340,10 +341,13 @@ class TDThemeData extends ThemeExtension<TDThemeData> {
340341

341342
static TDThemeData parseThemeData(String name, themeConfig, TDExtraThemeData? extraThemeData) {
342343
var theme = _emptyData(name);
343-
Map<String, dynamic> curThemeMap = themeConfig['$name'];
344+
Map<String, dynamic>? curThemeMap = themeConfig['$name'];
345+
if (curThemeMap?.isEmpty ?? true) {
346+
return theme;
347+
}
344348

345349
/// 设置颜色
346-
Map<String, dynamic>? colorsMap = curThemeMap['color'];
350+
Map<String, dynamic>? colorsMap = curThemeMap?['color'];
347351
colorsMap?.forEach((key, value) {
348352
var color = toColor(value);
349353
if (color != null) {
@@ -352,31 +356,31 @@ class TDThemeData extends ThemeExtension<TDThemeData> {
352356
});
353357

354358
/// 设置颜色
355-
Map<String, dynamic>? refMap = curThemeMap['ref'];
359+
Map<String, dynamic>? refMap = curThemeMap?['ref'];
356360
refMap?.forEach((key, value) {
357361
theme.refMap[key] = value;
358362
});
359363

360364
/// 设置字体尺寸
361-
Map<String, dynamic>? fontsMap = curThemeMap['font'];
365+
Map<String, dynamic>? fontsMap = curThemeMap?['font'];
362366
fontsMap?.forEach((key, value) {
363367
theme.fontMap[key] = Font.fromJson(value);
364368
});
365369

366370
/// 设置圆角
367-
Map<String, dynamic>? cornersMap = curThemeMap['radius'];
371+
Map<String, dynamic>? cornersMap = curThemeMap?['radius'];
368372
cornersMap?.forEach((key, value) {
369373
theme.radiusMap[key] = value.toDouble();
370374
});
371375

372376
/// 设置字体
373-
Map<String, dynamic>? fontFamilyMap = curThemeMap['fontFamily'];
377+
Map<String, dynamic>? fontFamilyMap = curThemeMap?['fontFamily'];
374378
fontFamilyMap?.forEach((key, value) {
375379
theme.fontFamilyMap[key] = FontFamily.fromJson(value);
376380
});
377381

378382
/// 设置阴影
379-
Map<String, dynamic>? shadowMap = curThemeMap['shadow'];
383+
Map<String, dynamic>? shadowMap = curThemeMap?['shadow'];
380384
shadowMap?.forEach((key, value) {
381385
var list = <BoxShadow>[];
382386
(value as List).forEach((element) {
@@ -393,12 +397,12 @@ class TDThemeData extends ThemeExtension<TDThemeData> {
393397
});
394398

395399
/// 设置Margin
396-
Map<String, dynamic>? marginsMap = curThemeMap['margin'];
400+
Map<String, dynamic>? marginsMap = curThemeMap?['margin'];
397401
marginsMap?.forEach((key, value) {
398402
theme.spacerMap[key] = value.toDouble();
399403
});
400404

401-
if (extraThemeData != null) {
405+
if (extraThemeData != null && curThemeMap != null) {
402406
extraThemeData.parse(name, curThemeMap);
403407
theme.extraThemeData = extraThemeData;
404408
}

tdesign-site/site/docs/getting-started.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,24 @@ TDTheme.defaultData().fontBodyLarge
105105
);
106106
```
107107

108+
### 暗色模式
109+
通过“主题生成器”生成的主题配置文件,默认支持暗色模式相关色值。
110+
使用方法:
111+
```dart
112+
// 开启多套主题功能
113+
TDTheme.needMultiTheme();
114+
……
115+
// MaterialApp中设置三个属性如下,如果有自定义主题属性,可以通过copyWith()方法修改。
116+
// 注:主题切换需要业务自己试下,比如使用Provider,具体可参考tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart
117+
MaterialApp(
118+
theme: _themeData.systemThemeDataLight,
119+
darkTheme: _themeData.systemThemeDataDark,
120+
themeMode: themeModeProvider.themeMode,
121+
……
122+
)
123+
124+
```
125+
108126
## 国际化
109127

110128
TD组件库内部不内置国际化语言,但支持与flutter的国际化能力搭配使用。可以继承`TDResourceDelegate`类,该类抽离了组件内部所有文字资源,重新获取文字的方法,进行国际化处理,并通过 `TDTheme.setResourceBuilder` 注入。
@@ -165,7 +183,6 @@ class IntlResourceDelegate extends TDResourceDelegate {
165183
## 组件规划
166184

167185
- 新增规划中组件:瀑布流
168-
- 开发中功能:深色模式
169186
- 其他事项:API优化、单元测试、多端适配、文本居中优化
170187

171188
## 基础库版本

0 commit comments

Comments
 (0)