refactor
This commit is contained in:
@@ -10,6 +10,7 @@ import 'package:hiddify/core/model/constants.dart';
|
|||||||
import 'package:hiddify/core/model/region.dart';
|
import 'package:hiddify/core/model/region.dart';
|
||||||
import 'package:hiddify/core/preferences/general_preferences.dart';
|
import 'package:hiddify/core/preferences/general_preferences.dart';
|
||||||
import 'package:hiddify/features/common/general_pref_tiles.dart';
|
import 'package:hiddify/features/common/general_pref_tiles.dart';
|
||||||
|
import 'package:hiddify/features/config_option/data/config_option_repository.dart';
|
||||||
import 'package:hiddify/gen/assets.gen.dart';
|
import 'package:hiddify/gen/assets.gen.dart';
|
||||||
import 'package:hiddify/utils/utils.dart';
|
import 'package:hiddify/utils/utils.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
@@ -19,18 +20,23 @@ import 'package:timezone_to_country/timezone_to_country.dart';
|
|||||||
class IntroPage extends HookConsumerWidget with PresLogger {
|
class IntroPage extends HookConsumerWidget with PresLogger {
|
||||||
IntroPage({super.key});
|
IntroPage({super.key});
|
||||||
|
|
||||||
bool locationInfoLoaded = false;
|
final locationInfoLoaded = useState(false);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final t = ref.watch(translationsProvider);
|
final t = ref.watch(translationsProvider);
|
||||||
|
|
||||||
final isStarting = useState(false);
|
final isStarting = useState(false);
|
||||||
if (!locationInfoLoaded) {
|
useEffect(
|
||||||
autoSelectRegion(ref)
|
() {
|
||||||
.then((value) => loggy.debug("Auto Region selection finished!"));
|
if (!locationInfoLoaded.value) {
|
||||||
locationInfoLoaded = true;
|
autoSelectRegion(ref).then((value) => loggy.debug("Auto Region selection finished!"));
|
||||||
}
|
locationInfoLoaded.value = true;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
[],
|
||||||
|
);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: CustomScrollView(
|
child: CustomScrollView(
|
||||||
@@ -83,14 +89,10 @@ class IntroPage extends HookConsumerWidget with PresLogger {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (isStarting.value) return;
|
if (isStarting.value) return;
|
||||||
isStarting.value = true;
|
isStarting.value = true;
|
||||||
if (!ref
|
if (!ref.read(analyticsControllerProvider).requireValue) {
|
||||||
.read(analyticsControllerProvider)
|
|
||||||
.requireValue) {
|
|
||||||
loggy.info("disabling analytics per user request");
|
loggy.info("disabling analytics per user request");
|
||||||
try {
|
try {
|
||||||
await ref
|
await ref.read(analyticsControllerProvider.notifier).disableAnalytics();
|
||||||
.read(analyticsControllerProvider.notifier)
|
|
||||||
.disableAnalytics();
|
|
||||||
} catch (error, stackTrace) {
|
} catch (error, stackTrace) {
|
||||||
loggy.error(
|
loggy.error(
|
||||||
"could not disable analytics",
|
"could not disable analytics",
|
||||||
@@ -99,9 +101,7 @@ class IntroPage extends HookConsumerWidget with PresLogger {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ref
|
await ref.read(Preferences.introCompleted.notifier).update(true);
|
||||||
.read(Preferences.introCompleted.notifier)
|
|
||||||
.update(true);
|
|
||||||
},
|
},
|
||||||
child: isStarting.value
|
child: isStarting.value
|
||||||
? LinearProgressIndicator(
|
? LinearProgressIndicator(
|
||||||
@@ -127,10 +127,8 @@ class IntroPage extends HookConsumerWidget with PresLogger {
|
|||||||
loggy.debug(
|
loggy.debug(
|
||||||
'Timezone Region: ${regionLocale.region} Locale: ${regionLocale.locale}',
|
'Timezone Region: ${regionLocale.region} Locale: ${regionLocale.locale}',
|
||||||
);
|
);
|
||||||
await ref.read(Preferences.region.notifier).update(regionLocale.region);
|
await ref.read(ConfigOptions.region.notifier).update(regionLocale.region);
|
||||||
await ref
|
await ref.read(localePreferencesProvider.notifier).changeLocale(regionLocale.locale);
|
||||||
.read(localePreferencesProvider.notifier)
|
|
||||||
.changeLocale(regionLocale.locale);
|
|
||||||
return;
|
return;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
loggy.warning(
|
loggy.warning(
|
||||||
@@ -142,25 +140,20 @@ class IntroPage extends HookConsumerWidget with PresLogger {
|
|||||||
try {
|
try {
|
||||||
final DioHttpClient client = DioHttpClient(
|
final DioHttpClient client = DioHttpClient(
|
||||||
timeout: const Duration(seconds: 2),
|
timeout: const Duration(seconds: 2),
|
||||||
userAgent:
|
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0",
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0",
|
|
||||||
debug: true,
|
debug: true,
|
||||||
);
|
);
|
||||||
final response =
|
final response = await client.get<Map<String, dynamic>>('https://api.ip.sb/geoip/');
|
||||||
await client.get<Map<String, dynamic>>('https://api.ip.sb/geoip/');
|
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
final jsonData = response.data!;
|
final jsonData = response.data!;
|
||||||
final regionLocale =
|
final regionLocale = _getRegionLocale(jsonData['country_code']?.toString() ?? "");
|
||||||
_getRegionLocale(jsonData['country_code']?.toString() ?? "");
|
|
||||||
|
|
||||||
loggy.debug(
|
loggy.debug(
|
||||||
'Region: ${regionLocale.region} Locale: ${regionLocale.locale}',
|
'Region: ${regionLocale.region} Locale: ${regionLocale.locale}',
|
||||||
);
|
);
|
||||||
await ref.read(Preferences.region.notifier).update(regionLocale.region);
|
await ref.read(ConfigOptions.region.notifier).update(regionLocale.region);
|
||||||
await ref
|
await ref.read(localePreferencesProvider.notifier).changeLocale(regionLocale.locale);
|
||||||
.read(localePreferencesProvider.notifier)
|
|
||||||
.changeLocale(regionLocale.locale);
|
|
||||||
} else {
|
} else {
|
||||||
loggy.warning('Request failed with status: ${response.statusCode}');
|
loggy.warning('Request failed with status: ${response.statusCode}');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,11 @@ import 'package:hiddify/core/preferences/preferences_provider.dart';
|
|||||||
import 'package:hiddify/core/router/router.dart';
|
import 'package:hiddify/core/router/router.dart';
|
||||||
import 'package:hiddify/features/common/qr_code_scanner_screen.dart';
|
import 'package:hiddify/features/common/qr_code_scanner_screen.dart';
|
||||||
import 'package:hiddify/features/config_option/notifier/warp_option_notifier.dart';
|
import 'package:hiddify/features/config_option/notifier/warp_option_notifier.dart';
|
||||||
import 'package:hiddify/features/config_option/overview/config_options_page.dart';
|
|
||||||
import 'package:hiddify/features/config_option/overview/warp_options_widgets.dart';
|
import 'package:hiddify/features/config_option/overview/warp_options_widgets.dart';
|
||||||
import 'package:hiddify/features/profile/notifier/profile_notifier.dart';
|
import 'package:hiddify/features/profile/notifier/profile_notifier.dart';
|
||||||
import 'package:hiddify/utils/utils.dart';
|
import 'package:hiddify/utils/utils.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
|
||||||
|
|
||||||
class AddProfileModal extends HookConsumerWidget {
|
class AddProfileModal extends HookConsumerWidget {
|
||||||
const AddProfileModal({
|
const AddProfileModal({
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:dartx/dartx.dart';
|
import 'package:dartx/dartx.dart';
|
||||||
import 'package:fpdart/fpdart.dart';
|
|
||||||
import 'package:hiddify/core/haptic/haptic_service.dart';
|
import 'package:hiddify/core/haptic/haptic_service.dart';
|
||||||
import 'package:hiddify/core/localization/translations.dart';
|
import 'package:hiddify/core/localization/translations.dart';
|
||||||
import 'package:hiddify/core/preferences/preferences_provider.dart';
|
import 'package:hiddify/core/preferences/preferences_provider.dart';
|
||||||
@@ -128,10 +128,7 @@ class ProxiesOverviewNotifier extends _$ProxiesOverviewNotifier with AppLogger {
|
|||||||
);
|
);
|
||||||
if (state case AsyncData(value: final outbounds)) {
|
if (state case AsyncData(value: final outbounds)) {
|
||||||
await ref.read(hapticServiceProvider.notifier).lightImpact();
|
await ref.read(hapticServiceProvider.notifier).lightImpact();
|
||||||
await ref
|
await ref.read(proxyRepositoryProvider).selectProxy(groupTag, outboundTag).getOrElse((err) {
|
||||||
.read(proxyRepositoryProvider)
|
|
||||||
.selectProxy(groupTag, outboundTag)
|
|
||||||
.getOrElse((err) {
|
|
||||||
loggy.warning("error selecting outbound", err);
|
loggy.warning("error selecting outbound", err);
|
||||||
throw err;
|
throw err;
|
||||||
}).run();
|
}).run();
|
||||||
@@ -149,10 +146,7 @@ class ProxiesOverviewNotifier extends _$ProxiesOverviewNotifier with AppLogger {
|
|||||||
loggy.debug("testing group: [$groupTag]");
|
loggy.debug("testing group: [$groupTag]");
|
||||||
if (state case AsyncData()) {
|
if (state case AsyncData()) {
|
||||||
await ref.read(hapticServiceProvider.notifier).lightImpact();
|
await ref.read(hapticServiceProvider.notifier).lightImpact();
|
||||||
await ref
|
await ref.read(proxyRepositoryProvider).urlTest(groupTag).getOrElse((err) {
|
||||||
.read(proxyRepositoryProvider)
|
|
||||||
.urlTest(groupTag)
|
|
||||||
.getOrElse((err) {
|
|
||||||
loggy.error("error testing group", err);
|
loggy.error("error testing group", err);
|
||||||
throw err;
|
throw err;
|
||||||
}).run();
|
}).run();
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hiddify/core/localization/locale_extensions.dart';
|
|
||||||
import 'package:hiddify/gen/fonts.gen.dart';
|
|
||||||
import 'package:hiddify/features/proxy/model/proxy_entity.dart';
|
import 'package:hiddify/features/proxy/model/proxy_entity.dart';
|
||||||
|
import 'package:hiddify/gen/fonts.gen.dart';
|
||||||
import 'package:hiddify/utils/custom_loggers.dart';
|
import 'package:hiddify/utils/custom_loggers.dart';
|
||||||
import 'package:hiddify/utils/text_utils.dart';
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
|
||||||
class ProxyTile extends HookConsumerWidget with PresLogger {
|
class ProxyTile extends HookConsumerWidget with PresLogger {
|
||||||
@@ -81,16 +79,8 @@ class ProxyTile extends HookConsumerWidget with PresLogger {
|
|||||||
|
|
||||||
Color delayColor(BuildContext context, int delay) {
|
Color delayColor(BuildContext context, int delay) {
|
||||||
if (Theme.of(context).brightness == Brightness.dark) {
|
if (Theme.of(context).brightness == Brightness.dark) {
|
||||||
return switch (delay) {
|
return switch (delay) { < 800 => Colors.lightGreen, < 1500 => Colors.orange, _ => Colors.redAccent };
|
||||||
< 800 => Colors.lightGreen,
|
|
||||||
< 1500 => Colors.orange,
|
|
||||||
_ => Colors.redAccent
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
return switch (delay) {
|
return switch (delay) { < 800 => Colors.green, < 1500 => Colors.deepOrangeAccent, _ => Colors.red };
|
||||||
< 800 => Colors.green,
|
|
||||||
< 1500 => Colors.deepOrangeAccent,
|
|
||||||
_ => Colors.red
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hiddify/gen/fonts.gen.dart';
|
|
||||||
import 'package:intl/intl.dart' as intl;
|
import 'package:intl/intl.dart' as intl;
|
||||||
|
|
||||||
extension TextAlignX on BuildContext {
|
extension TextAlignX on BuildContext {
|
||||||
@@ -16,9 +15,7 @@ extension TextAlignX on BuildContext {
|
|||||||
|
|
||||||
extension StringX on String {
|
extension StringX on String {
|
||||||
TextDirection get textDirection {
|
TextDirection get textDirection {
|
||||||
return intl.Bidi.detectRtlDirectionality(this)
|
return intl.Bidi.detectRtlDirectionality(this) ? TextDirection.rtl : TextDirection.ltr;
|
||||||
? TextDirection.rtl
|
|
||||||
: TextDirection.ltr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
libcore
2
libcore
Submodule libcore updated: e725eb3611...40164efff8
Reference in New Issue
Block a user