Skip to content

Commit

Permalink
💾 Feat(Settings): New snackbar
Browse files Browse the repository at this point in the history
  • Loading branch information
Dynesshely committed Apr 1, 2024
1 parent f4fead1 commit 58c7169
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 171 deletions.
31 changes: 15 additions & 16 deletions kitx_mobile/lib/pages/settings_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,24 @@ class SettingsPage extends StatefulWidget implements ConstantPage {

@override
State<SettingsPage> createState() => _SettingsPageState();

/// Save Changes
static void saveChanges() => config.saveAsync().then(
(value) => Get.snackbar(
'Public_Success'.tr,
'SettingsPage_Saved'.tr,
snackPosition: SnackPosition.BOTTOM,
margin: EdgeInsets.all(20),
icon: const Icon(Icons.task_alt_rounded, color: Colors.greenAccent),
duration: const Duration(milliseconds: 600),
animationDuration: const Duration(milliseconds: 300),
),
);
}

class _SettingsPageState extends State<SettingsPage> {
var tileRadius = ContinuousRectangleBorder(borderRadius: BorderRadius.circular(10.0));

void showSnackBar(Widget content, {Duration? duration}) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: content,
showCloseIcon: true,
duration: duration ?? Duration(milliseconds: 400),
));
}

void saveChanges(BuildContext context) {
config.saveAsync().then(
(value) => showSnackBar(Text('SettingsPage_Saved'.tr)),
);
}

@override
void initState() {
super.initState();
Expand All @@ -66,14 +65,14 @@ class _SettingsPageState extends State<SettingsPage> {
child: const Text('简体中文'),
onTap: () => () {
instances.appInfo.languageCodeProperty = 'zh-CN';
saveChanges(context);
SettingsPage.saveChanges();
}.delay(milliseconds: 200).execute(),
),
PopupMenuItem(
child: const Text('English (US)'),
onTap: () => () {
instances.appInfo.languageCodeProperty = 'en-US';
saveChanges(context);
SettingsPage.saveChanges();
}.delay(milliseconds: 200).execute(),
),
],
Expand Down
87 changes: 37 additions & 50 deletions kitx_mobile/lib/pages/settings_pages/appearance_settings_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:kitx_mobile/pages/controls/settings_group_title.dart';
import 'package:kitx_mobile/pages/pages.dart';
import 'package:kitx_mobile/utils/composer.dart';
import 'package:kitx_mobile/utils/config.dart';
import 'package:kitx_mobile/utils/handlers/tasks/delayed_task.dart';
import 'package:kitx_mobile/utils/themes/light_theme.dart';

/// Exterior Settings Page
Expand All @@ -24,23 +25,9 @@ class AppearanceSettingsPage extends StatefulWidget implements ConstantPage {
}

class _AppearanceSettingsPageState extends State<AppearanceSettingsPage> {
var selectedModes = <ThemeMode>{instances.appInfo.themeMode};
var selectedMode = instances.appInfo.themeMode.obs;
var useMaterial3 = lightThemeData.value.useMaterial3.obs;

void showSnackBar(Widget content, {Duration? duration}) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: content,
showCloseIcon: true,
duration: duration ?? Duration(milliseconds: 400),
));
}

void saveChanges(BuildContext context) {
config.saveAsync().then(
(value) => showSnackBar(Text('SettingsPage_Saved'.tr)),
);
}

@override
void initState() {
super.initState();
Expand All @@ -61,38 +48,38 @@ class _AppearanceSettingsPageState extends State<AppearanceSettingsPage> {
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(horizontal: 30, vertical: 10),
child: SegmentedButton<ThemeMode>(
emptySelectionAllowed: false,
multiSelectionEnabled: false,
segments: <ButtonSegment<ThemeMode>>[
ButtonSegment<ThemeMode>(
value: ThemeMode.light,
label: Text('SettingsPage_Appearance_Theme_Light'.tr),
icon: Icon(Icons.light_mode),
),
ButtonSegment<ThemeMode>(
value: ThemeMode.dark,
label: Text('SettingsPage_Appearance_Theme_Dark'.tr),
icon: Icon(Icons.dark_mode),
),
ButtonSegment<ThemeMode>(
value: ThemeMode.system,
label: Text('SettingsPage_Appearance_Theme_FollowSystem'.tr),
icon: Icon(Icons.settings),
),
],
selected: selectedModes,
// selectedIcon: Icon(Icons.check),
showSelectedIcon: false,
onSelectionChanged: (Set<ThemeMode> newSelection) => {
setState(() {
selectedModes = newSelection;
}),
instances.appInfo.themeModeProperty = newSelection.first,
// Global.themeMode = newSelection.first,
// Get.changeThemeMode(newSelection.first),
saveChanges(context),
},
child: Obx(
() => SegmentedButton<ThemeMode>(
emptySelectionAllowed: false,
multiSelectionEnabled: false,
segments: <ButtonSegment<ThemeMode>>[
ButtonSegment<ThemeMode>(
value: ThemeMode.light,
label: Text('SettingsPage_Appearance_Theme_Light'.tr),
icon: Icon(Icons.light_mode),
),
ButtonSegment<ThemeMode>(
value: ThemeMode.dark,
label: Text('SettingsPage_Appearance_Theme_Dark'.tr),
icon: Icon(Icons.dark_mode),
),
ButtonSegment<ThemeMode>(
value: ThemeMode.system,
label: Text('SettingsPage_Appearance_Theme_FollowSystem'.tr),
icon: Icon(Icons.settings),
),
],
selected: <ThemeMode>{selectedMode.value},
// selectedIcon: Icon(Icons.check),
showSelectedIcon: false,
onSelectionChanged: (Set<ThemeMode> newSelection) {
selectedMode.value = newSelection.first;
instances.appInfo.themeModeProperty = newSelection.first;
// Global.themeMode = newSelection.first,
// Get.changeThemeMode(newSelection.first),
SettingsPage.saveChanges.delay(milliseconds: 200).execute();
},
),
),
),
const SizedBox(height: 30),
Expand All @@ -108,7 +95,7 @@ class _AppearanceSettingsPageState extends State<AppearanceSettingsPage> {
onChanged: (selection) {
instances.appInfo.updateTheme(useMaterial3: selection);
useMaterial3.value = selection;
saveChanges(context);
SettingsPage.saveChanges();
},
),
),
Expand All @@ -134,7 +121,7 @@ class _AppearanceSettingsPageState extends State<AppearanceSettingsPage> {
value: instances.appInfo.animationEnabled.value,
onChanged: (selection) {
instances.appInfo.animationEnabled.value = selection;
saveChanges(context);
SettingsPage.saveChanges();
},
),
),
Expand All @@ -152,7 +139,7 @@ class _AppearanceSettingsPageState extends State<AppearanceSettingsPage> {
value: config.delayOpenPageInHomePage.value,
onChanged: (selection) {
config.delayOpenPageInHomePage.value = selection;
saveChanges(context);
SettingsPage.saveChanges();
},
),
),
Expand Down
147 changes: 43 additions & 104 deletions kitx_mobile/lib/pages/settings_pages/log_settings_page.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:kitx_mobile/pages/controls/settings_group_divider.dart';
import 'package:kitx_mobile/pages/controls/settings_group_title.dart';
import 'package:kitx_mobile/pages/pages.dart';
import 'package:kitx_mobile/utils/composer.dart';
import 'package:kitx_mobile/utils/converters/size_converter.dart';
import 'package:logger/logger.dart';

/// Log Settings Page
class LogSettingsPage extends StatefulWidget implements ConstantPage {
Expand All @@ -23,29 +22,7 @@ class LogSettingsPage extends StatefulWidget implements ConstantPage {
}

class _LogSettingsPageState extends State<LogSettingsPage> {
var logFilePath = '/data/data/com.crequency.kitx.mobile/app_flutter/flog.db';

var logFileSizeString = 'getting ...'.obs;
var logFileExists = false.obs;

void updateLogFileSizeString() {
var file = File(logFilePath);
if (file.existsSync()) {
logFileSizeString.value = convert2string(file.lengthSync());
logFileExists.value = true;
} else {
logFileSizeString.value = 'File $logFilePath don\'t exists';
logFileExists.value = false;
}
}

void showSnackBar(Widget content, {Duration? duration}) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: content,
showCloseIcon: true,
duration: duration ?? Duration(milliseconds: 400),
));
}
var logLevel = Logger.level.obs;

@override
Widget build(BuildContext context) {
Expand All @@ -60,87 +37,49 @@ class _LogSettingsPageState extends State<LogSettingsPage> {
Column(
children: [
Container(
alignment: Alignment.center,
child: ElevatedButton(
onPressed: () {},
child: Text('SettingsPage_Log_Clean'.tr),
padding: EdgeInsets.symmetric(horizontal: 30),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('SettingsPage_Log_SelectLevel'.tr),
Obx(
() => DropdownButton<String>(
value: logLevel.value.name,
onChanged: (newLevel) {
// TODO: If new version of log lib removed deprecated member use, change this line
// ignore: deprecated_member_use
if (newLevel == Level.nothing.name || newLevel == Level.wtf.name || newLevel == Level.verbose.name) {
Get.snackbar(
'Public_Error'.tr,
'SettingsPage_Log_NotSupportedLevel'.trParams({'level': newLevel ?? 'null'}),
snackPosition: SnackPosition.BOTTOM,
margin: EdgeInsets.all(20),
icon: const Icon(Icons.error_outline_rounded, color: Colors.redAccent),
duration: const Duration(milliseconds: 1200),
animationDuration: const Duration(milliseconds: 300),
);
return;
}

Logger.level = Level.values.firstWhere((element) => element.name == newLevel);
logLevel.value = Logger.level;

SettingsPage.saveChanges();
},
items: Level.values.map<DropdownMenuItem<String>>((Level value) {
return DropdownMenuItem<String>(
value: value.name,
child: Text(value.name),
);
}).toList(),
),
),
],
),
),
// group(
// SettingsGroupTitle(titleKey: 'Public_Log'),
// Column(
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Obx(
// () => AnimatedContainer(
// duration: Duration(milliseconds: 700),
// curve: Curves.easeInOutCubic,
// width: logFileExists.value ? null : MediaQuery.of(context).size.width / 3 * 2,
// child: Text(logFileSizeString.value),
// ),
// ),
// const SizedBox(width: 10),
// IconButton(
// onPressed: updateLogFileSizeString,
// icon: Icon(Icons.refresh),
// )
// ],
// ),
// const SizedBox(height: 30),
// Container(
// alignment: Alignment.center,
// child: ElevatedButton(
// onPressed: () async {
// var beforeSize = 0;
// var beforeSizeString = convert2string(beforeSize);
// var nowSize = 0;
// var nowSizeString = convert2string(nowSize);

// var file = File(logFilePath);

// if (file.existsSync()) {
// logFileExists.value = true;

// beforeSize = file.lengthSync();
// beforeSizeString = convert2string(beforeSize);
// }

// if (logFileExists.value) {
// await FLog.clearLogs();
// } else {
// FLog.clearLogs();
// }

// file = File(logFilePath);

// if (logFileExists.value) {
// nowSize = file.lengthSync();
// nowSizeString = convert2string(nowSize);
// }

// updateLogFileSizeString();

// if (logFileExists.value) {
// showSnackBar(Text('$beforeSizeString -> $nowSizeString'));
// } else {
// showSnackBar(Text('Log file clean action requested.'));
// }
// }.delay(milliseconds: 200).execute,
// child: Text('SettingsPage_Log_Clean'.tr),
// ),
// ),
// const SizedBox(height: 30),
// ElevatedButton(onPressed: () {}, child: const Text('...')),
// ],
// ),
// const SettingsGroupDivider(),
// spacer: null,
// ),
],
),
const SizedBox(),
const SettingsGroupDivider(),
),
],
),
Expand Down
3 changes: 2 additions & 1 deletion kitx_mobile/lib/utils/config.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
library kitx_moblie.config;

import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'package:kitx_mobile/instances.dart';
import 'package:kitx_mobile/utils/extensions/int_ext.dart';
Expand Down Expand Up @@ -54,7 +55,7 @@ class Config {

delayOpenPageInHomePage.value = prefs.getBool('delayOpenPageInHomePage') ?? false;

Logger.level = (prefs.getInt('logLevel') ?? 0).toLogLevel();
Logger.level = (prefs.getInt('logLevel') ?? (kDebugMode ? Level.info.index : Level.warning.index)).toLogLevel();
}

/// Save all configurations
Expand Down
5 changes: 5 additions & 0 deletions kitx_mobile/lib/utils/translation/en_us.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ const Map<String, String> en_us = {
'Public_Restart': 'Restart',
'Public_Chat': 'Chat',
'Public_Closed': 'Closed',
'Public_Success': 'Success',
'Public_Failed': 'Failed',
'Public_Warning': 'Warning',
'Public_Error': 'Error',
'Public_Launch': 'Launch',
'Public_Launching': 'Launching',
Expand Down Expand Up @@ -55,6 +58,8 @@ const Map<String, String> en_us = {
'SettingsPage_Appearance_Animation_Additional': 'Additional animation',
'SettingsPage_Appearance_Animation_OpenPageDelay': 'Delay open page',
'SettingsPage_Log_Clean': 'Clean Log',
'SettingsPage_Log_SelectLevel': 'Select Log Level',
'SettingsPage_Log_NotSupportedLevel': 'The log level @level is not supported',
'SettingsPage_Saved': 'Changes saved!',
'AboutPage_Title': 'About',
'AboutPage_Version': 'Version',
Expand Down
Loading

0 comments on commit 58c7169

Please sign in to comment.