2025-07-31 17:09:18 +08:00
|
|
|
// ignore_for_file: constant_identifier_names
|
|
|
|
|
|
2024-12-03 21:47:12 +08:00
|
|
|
import 'dart:math';
|
2024-04-30 23:38:49 +08:00
|
|
|
import 'dart:ui';
|
|
|
|
|
|
2024-09-26 14:29:04 +08:00
|
|
|
import 'package:collection/collection.dart';
|
2024-12-03 21:47:12 +08:00
|
|
|
import 'package:fl_clash/common/common.dart';
|
2024-07-15 22:06:09 +08:00
|
|
|
import 'package:fl_clash/enum/enum.dart';
|
2024-09-26 14:29:04 +08:00
|
|
|
import 'package:fl_clash/models/models.dart';
|
2024-04-30 23:38:49 +08:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
const appName = 'FlClash';
|
|
|
|
|
const appHelperService = 'FlClashHelperService';
|
|
|
|
|
const coreName = 'clash.meta';
|
2025-02-09 18:39:38 +08:00
|
|
|
const browserUa =
|
2025-06-07 01:48:34 +08:00
|
|
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
|
|
|
|
|
const packageName = 'com.follow.clash';
|
|
|
|
|
final unixSocketPath = '/tmp/FlClashSocket_${Random().nextInt(10000)}.sock';
|
2024-12-03 21:47:12 +08:00
|
|
|
const helperPort = 47890;
|
2025-04-18 17:50:46 +08:00
|
|
|
const maxTextScale = 1.4;
|
|
|
|
|
const minTextScale = 0.8;
|
|
|
|
|
final baseInfoEdgeInsets = EdgeInsets.symmetric(
|
|
|
|
|
vertical: 16.ap,
|
|
|
|
|
horizontal: 16.ap,
|
2024-12-09 01:40:39 +08:00
|
|
|
);
|
2025-10-14 15:13:52 +08:00
|
|
|
final listHeaderPadding = EdgeInsets.only(
|
|
|
|
|
left: 16.ap,
|
|
|
|
|
right: 8.ap,
|
|
|
|
|
top: 24.ap,
|
|
|
|
|
bottom: 8.ap,
|
|
|
|
|
);
|
2025-03-12 17:15:31 +08:00
|
|
|
|
2025-12-16 11:23:09 +08:00
|
|
|
const watchExecution = true;
|
|
|
|
|
|
2025-05-02 02:24:12 +08:00
|
|
|
final defaultTextScaleFactor =
|
|
|
|
|
WidgetsBinding.instance.platformDispatcher.textScaleFactor;
|
2024-05-20 15:15:09 +08:00
|
|
|
const httpTimeoutDuration = Duration(milliseconds: 5000);
|
|
|
|
|
const moreDuration = Duration(milliseconds: 100);
|
2024-06-23 00:26:24 +08:00
|
|
|
const animateDuration = Duration(milliseconds: 100);
|
2025-05-02 02:24:12 +08:00
|
|
|
const midDuration = Duration(milliseconds: 200);
|
2024-12-09 01:40:39 +08:00
|
|
|
const commonDuration = Duration(milliseconds: 300);
|
2024-05-20 15:15:09 +08:00
|
|
|
const defaultUpdateDuration = Duration(days: 1);
|
2025-07-31 17:09:18 +08:00
|
|
|
const MMDB = 'GEOIP.metadb';
|
|
|
|
|
const ASN = 'ASN.mmdb';
|
|
|
|
|
const GEOIP = 'GEOIP.dat';
|
|
|
|
|
const GEOSITE = 'GEOSITE.dat';
|
2024-09-08 21:21:21 +08:00
|
|
|
final double kHeaderHeight = system.isDesktop
|
2025-06-07 01:48:34 +08:00
|
|
|
? !system.isMacOS
|
2025-07-31 17:09:18 +08:00
|
|
|
? 40
|
|
|
|
|
: 28
|
2024-09-08 21:21:21 +08:00
|
|
|
: 0;
|
2025-06-07 01:48:34 +08:00
|
|
|
const profilesDirectoryName = 'profiles';
|
|
|
|
|
const localhost = '127.0.0.1';
|
|
|
|
|
const clashConfigKey = 'clash_config';
|
|
|
|
|
const configKey = 'config';
|
2024-05-20 15:15:09 +08:00
|
|
|
const double dialogCommonWidth = 300;
|
2025-06-07 01:48:34 +08:00
|
|
|
const repository = 'chen08209/FlClash';
|
|
|
|
|
const defaultExternalController = '127.0.0.1:9090';
|
2024-05-20 15:15:09 +08:00
|
|
|
const maxMobileWidth = 600;
|
|
|
|
|
const maxLaptopWidth = 840;
|
2025-06-07 01:48:34 +08:00
|
|
|
const defaultTestUrl = 'https://www.gstatic.com/generate_204';
|
2025-03-12 17:15:31 +08:00
|
|
|
final commonFilter = ImageFilter.blur(
|
2024-05-20 15:15:09 +08:00
|
|
|
sigmaX: 5,
|
|
|
|
|
sigmaY: 5,
|
|
|
|
|
tileMode: TileMode.mirror,
|
|
|
|
|
);
|
2024-05-11 17:02:34 +08:00
|
|
|
|
2025-12-16 11:23:09 +08:00
|
|
|
const listEquality = ListEquality();
|
2024-09-26 14:29:04 +08:00
|
|
|
const navigationItemListEquality = ListEquality<NavigationItem>();
|
2025-06-07 01:48:34 +08:00
|
|
|
const trackerInfoListEquality = ListEquality<TrackerInfo>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const stringListEquality = ListEquality<String>();
|
2025-04-18 17:50:46 +08:00
|
|
|
const intListEquality = ListEquality<int>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const logListEquality = ListEquality<Log>();
|
|
|
|
|
const groupListEquality = ListEquality<Group>();
|
2025-10-14 15:13:52 +08:00
|
|
|
const ruleListEquality = ListEquality<Rule>();
|
2025-12-16 11:23:09 +08:00
|
|
|
const scriptListEquality = ListEquality<Script>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const externalProviderListEquality = ListEquality<ExternalProvider>();
|
|
|
|
|
const packageListEquality = ListEquality<Package>();
|
2025-12-16 11:23:09 +08:00
|
|
|
const profileListEquality = ListEquality<Profile>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const hotKeyActionListEquality = ListEquality<HotKeyAction>();
|
|
|
|
|
const stringAndStringMapEquality = MapEquality<String, String>();
|
2025-10-14 15:13:52 +08:00
|
|
|
const stringAndStringMapEntryListEquality =
|
|
|
|
|
ListEquality<MapEntry<String, String>>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const stringAndStringMapEntryIterableEquality =
|
|
|
|
|
IterableEquality<MapEntry<String, String>>();
|
2025-12-16 11:23:09 +08:00
|
|
|
const stringAndObjectMapEntryIterableEquality =
|
|
|
|
|
IterableEquality<MapEntry<String, Object?>>();
|
2025-01-13 19:08:17 +08:00
|
|
|
const delayMapEquality = MapEquality<String, Map<String, int?>>();
|
2024-09-26 14:29:04 +08:00
|
|
|
const stringSetEquality = SetEquality<String>();
|
|
|
|
|
const keyboardModifierListEquality = SetEquality<KeyboardModifier>();
|
|
|
|
|
|
2024-07-15 22:06:09 +08:00
|
|
|
const viewModeColumnsMap = {
|
|
|
|
|
ViewMode.mobile: [2, 1],
|
|
|
|
|
ViewMode.laptop: [3, 2],
|
|
|
|
|
ViewMode.desktop: [4, 3],
|
|
|
|
|
};
|
|
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
const proxiesListStoreKey = PageStorageKey<String>('proxies_list');
|
|
|
|
|
const toolsStoreKey = PageStorageKey<String>('tools');
|
|
|
|
|
const profilesStoreKey = PageStorageKey<String>('profiles');
|
2025-05-02 02:24:12 +08:00
|
|
|
|
2025-04-18 17:50:46 +08:00
|
|
|
const defaultPrimaryColor = 0XFFD8C0C3;
|
2024-12-09 01:40:39 +08:00
|
|
|
|
|
|
|
|
double getWidgetHeight(num lines) {
|
2025-07-31 17:09:18 +08:00
|
|
|
return max(lines * 80 + (lines - 1) * 16, 0).ap;
|
2024-12-09 01:40:39 +08:00
|
|
|
}
|
2025-01-13 19:08:17 +08:00
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
const maxLength = 1000;
|
2025-04-18 17:50:46 +08:00
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
final mainIsolate = 'FlClashMainIsolate';
|
2025-01-13 19:08:17 +08:00
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
final serviceIsolate = 'FlClashServiceIsolate';
|
2025-04-09 16:46:14 +08:00
|
|
|
|
|
|
|
|
const defaultPrimaryColors = [
|
2025-04-18 17:50:46 +08:00
|
|
|
0xFF795548,
|
2025-04-09 16:46:14 +08:00
|
|
|
0xFF03A9F4,
|
|
|
|
|
0xFFFFFF00,
|
|
|
|
|
0XFFBBC9CC,
|
|
|
|
|
0XFFABD397,
|
2025-04-18 17:50:46 +08:00
|
|
|
defaultPrimaryColor,
|
2025-04-09 16:46:14 +08:00
|
|
|
0XFF665390,
|
|
|
|
|
];
|
2025-05-02 02:24:12 +08:00
|
|
|
|
2025-06-07 01:48:34 +08:00
|
|
|
const scriptTemplate = '''
|
2025-05-02 02:24:12 +08:00
|
|
|
const main = (config) => {
|
|
|
|
|
return config;
|
2025-06-07 01:48:34 +08:00
|
|
|
}''';
|
2025-12-16 11:23:09 +08:00
|
|
|
|
|
|
|
|
const backupDatabaseName = 'database.sqlite';
|
|
|
|
|
const configJsonName = 'config.json';
|