Skip to content

Commit f176efd

Browse files
committed
改造设置页
1 parent c25931c commit f176efd

11 files changed

Lines changed: 272 additions & 102 deletions

File tree

tdesign-component/example/lib/about.dart

Lines changed: 0 additions & 51 deletions
This file was deleted.

tdesign-component/example/lib/base/example_route.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import 'package:flutter/material.dart';
2-
import '../about.dart';
2+
33
import '../config.dart';
4-
import '../home.dart';
4+
import '../setting.dart';
55
import 'api_widget.dart';
66
import 'example_base.dart';
7-
import 'example_widget.dart';
87

98
class TDExampleRoute {
109
static final Map<String, ExamplePageModel> pageModelList = {};
@@ -23,9 +22,9 @@ class TDExampleRoute {
2322
});
2423
// 添加关于页路由
2524
pageModelList[aboutPath] = ExamplePageModel(
26-
text: '关于',
27-
name: 'AboutPage',
28-
pageBuilder: (context, model) => const AboutPage());
25+
text: '设置',
26+
name: 'settingPage',
27+
pageBuilder: (context, model) => const SettingPage());
2928
}
3029

3130
static void add(ExamplePageModel model) {

tdesign-component/example/lib/home.dart

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,12 @@ class MyHomePage extends StatefulWidget {
2424
Key? key,
2525
required this.title,
2626
this.onThemeChange,
27-
this.locale,
28-
this.onLocaleChange,
2927
}) : super(key: key);
3028

3129
final String title;
3230

3331
final OnThemeChange? onThemeChange;
3432

35-
final OnLocaleChange? onLocaleChange;
36-
37-
final Locale? locale;
38-
3933
@override
4034
_MyHomePageState createState() => _MyHomePageState();
4135
}
@@ -71,29 +65,7 @@ class _MyHomePageState extends State<MyHomePage> {
7165
padding: const EdgeInsets.only(
7266
right: 16,
7367
),
74-
child: TDText(
75-
widget.locale?.languageCode == 'en' ? '中文' : 'English',
76-
textColor: TDTheme.of(context).whiteColor1,
77-
),
78-
),
79-
onTap: () {
80-
if (widget.locale?.languageCode == 'en') {
81-
widget.onLocaleChange?.call(const Locale('zh'));
82-
} else {
83-
widget.onLocaleChange?.call(const Locale('en'));
84-
}
85-
},
86-
),
87-
GestureDetector(
88-
child: Container(
89-
alignment: Alignment.centerRight,
90-
padding: const EdgeInsets.only(
91-
right: 16,
92-
),
93-
child: TDText(
94-
AppLocalizations.of(context)?.about,
95-
textColor: TDTheme.of(context).whiteColor1,
96-
),
68+
child: Icon(TDIcons.setting, color: TDTheme.of(context).whiteColor1,),
9769
),
9870
onTap: () {
9971
focusNode.unfocus();

tdesign-component/example/lib/l10n/app_en.arb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
22
"components": "TD Flutter Components",
3-
"about": "About",
3+
"setting": "Setting",
4+
"about": "AboutUs",
5+
"version": "Version",
6+
"publishDate": "PublishDate",
47
"defaultTheme": "defaultTheme",
58
"greenTheme": "greenTheme",
69
"redTheme": "redTheme",

tdesign-component/example/lib/l10n/app_localizations.dart

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,30 @@ abstract class AppLocalizations {
104104
/// **'TD Flutter Components'**
105105
String get components;
106106

107+
/// No description provided for @setting.
108+
///
109+
/// In en, this message translates to:
110+
/// **'Setting'**
111+
String get setting;
112+
107113
/// No description provided for @about.
108114
///
109115
/// In en, this message translates to:
110-
/// **'About'**
116+
/// **'AboutUs'**
111117
String get about;
112118

119+
/// No description provided for @version.
120+
///
121+
/// In en, this message translates to:
122+
/// **'Version'**
123+
String get version;
124+
125+
/// No description provided for @publishDate.
126+
///
127+
/// In en, this message translates to:
128+
/// **'PublishDate'**
129+
String get publishDate;
130+
113131
/// No description provided for @defaultTheme.
114132
///
115133
/// In en, this message translates to:

tdesign-component/example/lib/l10n/app_localizations_en.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ class AppLocalizationsEn extends AppLocalizations {
1212
String get components => 'TD Flutter Components';
1313

1414
@override
15-
String get about => 'About';
15+
String get setting => 'Setting';
16+
17+
@override
18+
String get about => 'AboutUs';
19+
20+
@override
21+
String get version => 'Version';
22+
23+
@override
24+
String get publishDate => 'PublishDate';
1625

1726
@override
1827
String get defaultTheme => 'defaultTheme';

tdesign-component/example/lib/l10n/app_localizations_zh.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ class AppLocalizationsZh extends AppLocalizations {
1212
String get components => 'TDesign Flutter 组件库';
1313

1414
@override
15-
String get about => '关于';
15+
String get setting => '设置';
16+
17+
@override
18+
String get about => '关于我们';
19+
20+
@override
21+
String get version => '版本号';
22+
23+
@override
24+
String get publishDate => '发版日期';
1625

1726
@override
1827
String get defaultTheme => '默认主题';

tdesign-component/example/lib/l10n/app_zh.arb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
22
"components": "TDesign Flutter 组件库",
3-
"about": "关于",
3+
"setting": "设置",
4+
"about": "关于我们",
5+
"version": "版本号",
6+
"publishDate": "发版日期",
47
"defaultTheme": "默认主题",
58
"greenTheme": "绿色主题",
69
"redTheme": "红色主题",

tdesign-component/example/lib/main.dart

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'base/intl_resource_delegate.dart';
99
import 'config.dart';
1010
import 'home.dart';
1111
import 'l10n/app_localizations.dart';
12+
import 'provider/locale_provider.dart';
1213
import 'provider/theme_mode_provider.dart';
1314

1415
Future<void> main() async {
@@ -44,8 +45,6 @@ class MyApp extends StatefulWidget {
4445
class _MyAppState extends State<MyApp> {
4546
late TDThemeData _themeData;
4647

47-
Locale? locale = const Locale('zh');
48-
4948
@override
5049
void initState() {
5150
super.initState();
@@ -71,9 +70,18 @@ class _MyAppState extends State<MyApp> {
7170
return provider;
7271
},
7372
),
73+
ChangeNotifierProvider(
74+
create: (_) {
75+
final provider = LocaleProvider();
76+
WidgetsBinding.instance.addPostFrameCallback((_) async {
77+
await provider.initLocale();
78+
});
79+
return provider;
80+
},
81+
),
7482
],
75-
child: Consumer<ThemeModeProvider>(
76-
builder: (context, themeModeProvider, child) {
83+
child: Consumer2<ThemeModeProvider, LocaleProvider>(
84+
builder: (context, themeModeProvider, localeProvider, child) {
7785
return MaterialApp(
7886
title: 'TDesign Flutter Example',
7987
theme: _themeData.systemThemeDataLight,
@@ -90,12 +98,6 @@ class _MyAppState extends State<MyApp> {
9098
);
9199
return MyHomePage(
92100
title: AppLocalizations.of(context)?.components ?? '',
93-
locale: locale,
94-
onLocaleChange: (locale) {
95-
setState(() {
96-
this.locale = locale;
97-
});
98-
},
99101
onThemeChange: (themeData) {
100102
setState(() {
101103
_themeData = themeData;
@@ -105,7 +107,7 @@ class _MyAppState extends State<MyApp> {
105107
},
106108
),
107109
// 设置国际化处理
108-
locale: locale,
110+
locale: localeProvider.locale,
109111
supportedLocales: AppLocalizations.supportedLocales,
110112
localizationsDelegates: AppLocalizations.localizationsDelegates,
111113
onGenerateRoute: TDExampleRoute.onGenerateRoute,
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:shared_preferences/shared_preferences.dart';
3+
4+
class LocaleProvider extends ChangeNotifier {
5+
final SharedPreferencesAsync asyncPrefs = SharedPreferencesAsync();
6+
7+
/// 当前语言设置
8+
Locale _locale = const Locale('zh');
9+
10+
Locale get locale => _locale;
11+
12+
set locale(Locale locale) {
13+
if (_locale != locale) {
14+
_locale = locale;
15+
notifyListeners();
16+
asyncPrefs.setString('setting:locale', locale.languageCode);
17+
}
18+
}
19+
20+
/// 切换语言
21+
void toggleLocale() {
22+
locale = _locale.languageCode == 'zh' ? const Locale('en') : const Locale('zh');
23+
}
24+
25+
/// 设置特定语言
26+
void setLocale(String languageCode) {
27+
locale = Locale(languageCode);
28+
}
29+
30+
/// 初始化语言设置
31+
Future<void> initLocale() async {
32+
final languageCode = await asyncPrefs.getString('setting:locale');
33+
if (languageCode != null) {
34+
_locale = Locale(languageCode);
35+
notifyListeners();
36+
}
37+
}
38+
39+
/// 获取当前语言显示名称
40+
String get currentLanguageName {
41+
return _locale.languageCode == 'en' ? 'English' : '中文';
42+
}
43+
}
44+
45+
/// SharedPreferences的异步封装
46+
class SharedPreferencesAsync {
47+
Future<SharedPreferences> get _prefs async => await SharedPreferences.getInstance();
48+
49+
Future<void> setString(String key, String value) async {
50+
final prefs = await _prefs;
51+
await prefs.setString(key, value);
52+
}
53+
54+
Future<String?> getString(String key) async {
55+
final prefs = await _prefs;
56+
return prefs.getString(key);
57+
}
58+
59+
Future<void> setInt(String key, int value) async {
60+
final prefs = await _prefs;
61+
await prefs.setInt(key, value);
62+
}
63+
64+
Future<int?> getInt(String key) async {
65+
final prefs = await _prefs;
66+
return prefs.getInt(key);
67+
}
68+
}

0 commit comments

Comments
 (0)