Add experimental flag in settings ui

This commit is contained in:
problematicconsumer
2023-12-29 15:35:01 +03:30
parent 6a9892e847
commit 81c069643b
8 changed files with 64 additions and 7 deletions

View File

@@ -131,6 +131,8 @@
"settings": {
"pageTitle": "Settings",
"requiresRestartMsg": "For this to take effect restart the app",
"experimental": "Experimental",
"experimentalMsg": "Features with Experimental flag are still in development and might cause issues.",
"general": {
"sectionTitle": "General",
"locale": "Language",

View File

@@ -131,6 +131,8 @@
"settings": {
"pageTitle": "تنظیمات",
"requiresRestartMsg": "برای اعمال این تنظیم برنامه را بازنشانی کنید",
"experimental": "آزمایشی",
"experimentalMsg": "تنظیماتی که عنوان آزمایشی دارند همچنان در دست توسعه هستند و فعال‌سازی آن‌ها میتواند خطاهایی بوجود بیاورد.",
"general": {
"sectionTitle": "عمومی",
"locale": "زبان",

View File

@@ -238,7 +238,9 @@
"successMsg": "Объект успешно обновлен",
"addRecommended": "Добавить рекомендуемые активы",
"missingGeoAssetsMsg": "Файлы выбранных ресурсов маршрутизации отсутствуют. Либо скачайте их, либо выберите существующие."
}
},
"experimental": "Экспериментальный",
"experimentalMsg": "Функции с флагом «Экспериментально» все еще находятся в разработке и могут вызвать проблемы."
},
"about": {
"pageTitle": "О программе",

View File

@@ -238,7 +238,9 @@
"successMsg": "Öğe başarıyla güncellendi",
"addRecommended": "Önerilen Varlıkları Ekle",
"missingGeoAssetsMsg": "Seçilen yönlendirme varlıklarının dosyaları eksik. Bunları indirin veya mevcut olanları seçin."
}
},
"experimental": "Deneysel",
"experimentalMsg": "Deneysel işaretli özellikler hâlâ geliştirilme aşamasındadır ve sorunlara neden olabilir."
},
"about": {
"pageTitle": "Hakkında",

View File

@@ -238,7 +238,9 @@
"successMsg": "已成功更新资源文件",
"addRecommended": "添加建议的资源文件",
"missingGeoAssetsMsg": "所选路由资源的文件丢失。下载它们或选择现有的。"
}
},
"experimental": "实验性的",
"experimentalMsg": "带有实验标志的功能仍在开发中,可能会导致问题。"
},
"about": {
"pageTitle": "关于",

View File

@@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
class TipCard extends StatelessWidget {
const TipCard({required this.message, super.key});
final String message;
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 4,
),
child: Row(
children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: Icon(Icons.lightbulb),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 8,
),
child: Text(message),
),
],
),
),
],
),
);
}
}

View File

@@ -5,6 +5,7 @@ import 'package:gap/gap.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/core/model/failures.dart';
import 'package:hiddify/core/model/range.dart';
import 'package:hiddify/core/widget/tip_card.dart';
import 'package:hiddify/features/config_option/model/config_option_entity.dart';
import 'package:hiddify/features/config_option/model/config_option_patch.dart';
import 'package:hiddify/features/config_option/notifier/config_option_notifier.dart';
@@ -30,6 +31,10 @@ class ConfigOptionsPage extends HookConsumerWidget {
await ref.read(configOptionNotifierProvider.notifier).updateOption(patch);
}
String experimental(String txt) {
return "$txt (${t.settings.experimental})";
}
return Scaffold(
appBar: AppBar(
title: Text(t.settings.config.pageTitle),
@@ -62,6 +67,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
body: switch (asyncOptions) {
AsyncData(value: final options) => ListView(
children: [
TipCard(message: t.settings.experimentalMsg),
ListTile(
title: Text(t.settings.config.logLevel),
subtitle: Text(options.logLevel.name.toUpperCase()),
@@ -251,7 +257,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
const SettingsDivider(),
SettingsSection(t.settings.config.section.outbound),
SwitchListTile(
title: Text(t.settings.config.enableTlsFragment),
title: Text(experimental(t.settings.config.enableTlsFragment)),
value: options.enableTlsFragment,
onChanged: (value) async =>
changeOption(ConfigOptionPatch(enableTlsFragment: value)),
@@ -291,14 +297,15 @@ class ConfigOptionsPage extends HookConsumerWidget {
},
),
SwitchListTile(
title: Text(t.settings.config.enableTlsMixedSniCase),
title:
Text(experimental(t.settings.config.enableTlsMixedSniCase)),
value: options.enableTlsMixedSniCase,
onChanged: (value) async => changeOption(
ConfigOptionPatch(enableTlsMixedSniCase: value),
),
),
SwitchListTile(
title: Text(t.settings.config.enableTlsPadding),
title: Text(experimental(t.settings.config.enableTlsPadding)),
value: options.enableTlsPadding,
onChanged: (value) async => changeOption(
ConfigOptionPatch(enableTlsPadding: value),

View File

@@ -25,7 +25,8 @@ enum ServiceMode {
String present(TranslationsEn t) => switch (this) {
proxy => t.settings.config.serviceModes.proxy,
systemProxy => t.settings.config.serviceModes.systemProxy,
tun => t.settings.config.serviceModes.tun,
tun =>
"${t.settings.config.serviceModes.tun}${PlatformUtils.isDesktop ? " (${t.settings.experimental})" : ""}",
};
}