#12 new: custom theme mode

This commit is contained in:
lollipopkit
2023-02-25 19:58:37 +08:00
parent 69fae4dd21
commit 5666a23e00
43 changed files with 403 additions and 2609 deletions

View File

@@ -4,6 +4,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/data/res/color.dart';
import '../../core/extension/colorx.dart';
@@ -14,7 +15,6 @@ import '../../data/store/private_key.dart';
import '../../data/store/server.dart';
import '../../data/store/setting.dart';
import '../../data/store/snippet.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
const backupFormatVersion = 1;
@@ -30,7 +30,7 @@ class BackupPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final media = MediaQuery.of(context);
final s = S.of(context);
final s = S.of(context)!;
return Scaffold(
appBar: AppBar(
title: Text(s.importAndExport, style: textSize18),

View File

@@ -2,10 +2,10 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../core/utils/ui.dart';
import '../../data/res/color.dart';
import '../../generated/l10n.dart';
import '../widget/input_field.dart';
import '../widget/round_rect_card.dart';
@@ -38,7 +38,7 @@ class _ConvertPageState extends State<ConvertPage>
super.didChangeDependencies();
_media = MediaQuery.of(context);
_theme = Theme.of(context);
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import '../../core/utils/ui.dart';
@@ -11,7 +12,6 @@ import '../../data/res/font_style.dart';
import '../../data/res/menu.dart';
import '../../data/res/url.dart';
import '../../data/store/docker.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
import '../widget/center_loading.dart';
import '../widget/dropdown_menu.dart';
@@ -41,7 +41,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,5 +1,6 @@
import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:get_it/get_it.dart';
import '../../core/analysis.dart';
@@ -15,7 +16,6 @@ import '../../data/res/icon.dart';
import '../../data/res/tab.dart';
import '../../data/res/url.dart';
import '../../data/store/setting.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
import '../widget/url_text.dart';
import 'backup.dart';
@@ -61,7 +61,7 @@ class _MyHomePageState extends State<MyHomePage>
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
_width = MediaQuery.of(context).size.width;
}

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../core/extension/uint8list.dart';
import '../../core/utils/ui.dart';
@@ -9,7 +10,6 @@ import '../../data/model/server/ping_result.dart';
import '../../data/provider/server.dart';
import '../../data/res/color.dart';
import '../../data/res/font_style.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
import '../widget/input_field.dart';
import '../widget/round_rect_card.dart';
@@ -45,7 +45,7 @@ class _PingPageState extends State<PingPage>
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
s = S.of(context);
s = S.of(context)!;
}
@override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import '../../data/model/pkg/upgrade_info.dart';
@@ -8,7 +9,6 @@ import '../../data/model/server/server_private_info.dart';
import '../../data/provider/pkg.dart';
import '../../data/provider/server.dart';
import '../../data/res/font_style.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
import '../widget/center_loading.dart';
import '../widget/round_rect_card.dart';
@@ -36,7 +36,7 @@ class _PkgManagePageState extends State<PkgManagePage>
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -4,6 +4,7 @@ import 'package:after_layout/after_layout.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/extension/numx.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/data/res/misc.dart';
@@ -13,7 +14,6 @@ import '../../../core/utils/ui.dart';
import '../../../data/model/server/private_key_info.dart';
import '../../../data/provider/private_key.dart';
import '../../../data/res/font_style.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/input_decoration.dart';
@@ -53,7 +53,7 @@ class _PrivateKeyEditPageState extends State<PrivateKeyEditPage>
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
_focusScope = FocusScope.of(context);
}

View File

@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/provider/private_key.dart';
import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/view/page/private_key/edit.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../../core/route.dart';
import '../../../data/provider/private_key.dart';
import '../../../data/res/font_style.dart';
import 'edit.dart';
import '../../../view/widget/round_rect_card.dart';
class PrivateKeysListPage extends StatefulWidget {
const PrivateKeysListPage({Key? key}) : super(key: key);
@@ -20,7 +21,7 @@ class _PrivateKeyListState extends State<PrivateKeysListPage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import '../../../core/extension/numx.dart';
@@ -12,7 +13,6 @@ import '../../../data/res/font_style.dart';
import '../../../data/res/padding.dart';
import '../../../data/res/sizedbox.dart';
import '../../../data/store/setting.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/round_rect_card.dart';
@@ -35,7 +35,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
_s = S.of(context);
_s = S.of(context)!;
_showDistLogo = locator<SettingStore>().showDistLogo.fetch()!;
}

View File

@@ -1,5 +1,6 @@
import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import '../../../core/route.dart';
@@ -11,7 +12,6 @@ import '../../../data/provider/server.dart';
import '../../../data/res/color.dart';
import '../../../data/res/font_style.dart';
import '../../../data/store/private_key.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/input_decoration.dart';
import '../private_key/edit.dart';
@@ -53,7 +53,7 @@ class _ServerEditPageState extends State<ServerEditPage> with AfterLayoutMixin {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
_focusScope = FocusScope.of(context);
}

View File

@@ -1,6 +1,7 @@
import 'package:after_layout/after_layout.dart';
import 'package:circle_chart/circle_chart.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:get_it/get_it.dart';
import 'package:provider/provider.dart';
@@ -16,7 +17,6 @@ import '../../../data/res/font_style.dart';
import '../../../data/res/menu.dart';
import '../../../data/res/url.dart';
import '../../../data/store/setting.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/dropdown_menu.dart';
import '../../widget/picker.dart';
@@ -57,7 +57,7 @@ class _ServerPageState extends State<ServerPage>
super.didChangeDependencies();
_media = MediaQuery.of(context);
_theme = Theme.of(context);
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:flutter_material_color_picker/flutter_material_color_picker.dart';
import 'package:provider/provider.dart';
@@ -12,7 +13,6 @@ import '../../data/res/color.dart';
import '../../data/res/font_style.dart';
import '../../data/res/tab.dart';
import '../../data/store/setting.dart';
import '../../generated/l10n.dart';
import '../../locator.dart';
import '../widget/round_rect_card.dart';
@@ -32,6 +32,7 @@ class _SettingPageState extends State<SettingPage> {
late int _selectedColorValue;
late int _launchPageIdx;
late int _termThemeIdx;
late int _nightMode;
late double _maxRetryCount;
late double _updateInterval;
@@ -39,7 +40,7 @@ class _SettingPageState extends State<SettingPage> {
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
_s = S.of(context);
_s = S.of(context)!;
}
@override
@@ -49,6 +50,7 @@ class _SettingPageState extends State<SettingPage> {
_setting = locator<SettingStore>();
_launchPageIdx = _setting.launchPage.fetch()!;
_termThemeIdx = _setting.termColorIdx.fetch()!;
_nightMode = _setting.nightMode.fetch()!;
_updateInterval = _setting.serverStatusUpdateInterval.fetch()!.toDouble();
_maxRetryCount = _setting.maxRetryCount.fetch()!.toDouble();
}
@@ -88,6 +90,7 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildApp() {
return Column(
children: [
_buildNightMode(),
_buildAppColorPreview(),
_buildLaunchPage(),
_buildCheckUpdate(),
@@ -371,4 +374,49 @@ class _SettingPageState extends State<SettingPage> {
],
);
}
Widget _buildNightMode() {
return ExpansionTile(
textColor: primaryColor,
title: Text(
_s.themeMode,
style: textSize13,
textAlign: TextAlign.start,
),
trailing: Text(
_buildNightModeStr(_nightMode),
style: textSize13,
),
children: [
Slider(
thumbColor: primaryColor,
activeColor: primaryColor.withOpacity(0.7),
min: 0,
max: 2,
value: _nightMode.toDouble(),
onChanged: (newValue) {
setState(() {
_nightMode = newValue.toInt();
});
},
onChangeEnd: (val) {
_setting.nightMode.put(val.toInt());
},
label: _buildNightModeStr(_nightMode),
divisions: 2,
),
],
);
}
String _buildNightModeStr(int n) {
switch (n) {
case 1:
return _s.light;
case 2:
return _s.dark;
default:
return _s.auto;
}
}
}

View File

@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../../core/extension/numx.dart';
import '../../../core/extension/stringx.dart';
@@ -10,7 +11,6 @@ import '../../../core/utils/ui.dart';
import '../../../data/model/app/path_with_prefix.dart';
import '../../../data/res/font_style.dart';
import '../../../data/res/path.dart';
import '../../../generated/l10n.dart';
import '../../widget/fade_in.dart';
import 'downloading.dart';
@@ -39,7 +39,7 @@ class _SFTPDownloadedPageState extends State<SFTPDownloadedPage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import '../../../core/extension/numx.dart';
@@ -7,7 +8,6 @@ import '../../../core/utils/ui.dart';
import '../../../data/model/sftp/download_status.dart';
import '../../../data/provider/sftp_download.dart';
import '../../../data/res/font_style.dart';
import '../../../generated/l10n.dart';
import '../../widget/center_loading.dart';
import '../../widget/round_rect_card.dart';
@@ -24,7 +24,7 @@ class _SFTPDownloadingPageState extends State<SFTPDownloadingPage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -2,6 +2,7 @@ import 'dart:typed_data';
import 'package:dartssh2/dartssh2.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../../core/extension/numx.dart';
import '../../../core/extension/stringx.dart';
@@ -16,7 +17,6 @@ import '../../../data/provider/server.dart';
import '../../../data/provider/sftp_download.dart';
import '../../../data/res/path.dart';
import '../../../data/store/private_key.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/fade_in.dart';
import '../../widget/two_line_text.dart';
@@ -44,7 +44,7 @@ class _SFTPPageState extends State<SFTPPage> {
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,11 +1,11 @@
import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../../core/utils/ui.dart';
import '../../../data/model/server/snippet.dart';
import '../../../data/provider/snippet.dart';
import '../../../data/res/font_style.dart';
import '../../../generated/l10n.dart';
import '../../../locator.dart';
import '../../widget/input_decoration.dart';
@@ -36,7 +36,7 @@ class _SnippetEditPageState extends State<SnippetEditPage>
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/provider/snippet.dart';
import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/view/page/snippet/edit.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '/core/route.dart';
import '/data/provider/snippet.dart';
import '/data/res/font_style.dart';
import 'edit.dart';
import '/view/widget/round_rect_card.dart';
class SnippetListPage extends StatefulWidget {
const SnippetListPage({Key? key}) : super(key: key);
@@ -20,7 +21,7 @@ class _SnippetListPageState extends State<SnippetListPage> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -5,11 +5,11 @@ import 'package:dartssh2/dartssh2.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import 'package:xterm/xterm.dart' hide TerminalColors;
import '../../data/model/ssh/terminal_color.dart';
import '../../generated/l10n.dart';
import '../../core/utils/misc.dart';
import '../../core/utils/ui.dart';
import '../../core/utils/server.dart';
@@ -58,7 +58,7 @@ class _SSHPageState extends State<SSHPage> {
_isDark = isDarkMode(context);
_media = MediaQuery.of(context);
_menuTextStyle = TextStyle(color: contentColor.resolve(context));
_s = S.of(context);
_s = S.of(context)!;
}
@override

View File

@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../../data/res/menu.dart';
import '../../generated/l10n.dart';
class DropdownBtnItem {
final String text;