Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc0767ed25 | ||
|
|
dbf1724cca | ||
|
|
909aa4038e | ||
|
|
2d0a7d8d46 | ||
|
|
ca96cd1d82 | ||
|
|
91ab1e5dac | ||
|
|
b3a5f74df8 | ||
|
|
1f98be8ad8 | ||
|
|
453c7c98d0 | ||
|
|
91faed35c0 | ||
|
|
07bbaf6b6f | ||
|
|
e8feb7c431 | ||
|
|
4d16820526 | ||
|
|
92294b49c6 | ||
|
|
8a188a37c9 | ||
|
|
48af16c265 |
@@ -82,7 +82,7 @@ func updateConfig(s *C.char) bool {
|
||||
|
||||
//export getProxies
|
||||
func getProxies() *C.char {
|
||||
data, err := json.Marshal(tunnel.Proxies())
|
||||
data, err := json.Marshal(tunnel.ProxiesWithProviders())
|
||||
if err != nil {
|
||||
return C.CString("")
|
||||
}
|
||||
@@ -98,7 +98,7 @@ func changeProxy(s *C.char) bool {
|
||||
log.Infoln("Unmarshal ChangeProxyParams %v", err)
|
||||
return false
|
||||
}
|
||||
proxies := tunnel.Proxies()
|
||||
proxies := tunnel.ProxiesWithProviders()
|
||||
proxy := proxies[*params.GroupName]
|
||||
if proxy == nil {
|
||||
return false
|
||||
@@ -148,7 +148,7 @@ func asyncTestDelay(s *C.char) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*time.Duration(params.Timeout))
|
||||
defer cancel()
|
||||
|
||||
proxies := tunnel.Proxies()
|
||||
proxies := tunnel.ProxiesWithProviders()
|
||||
proxy := proxies[params.ProxyName]
|
||||
|
||||
delayData := &Delay{
|
||||
@@ -235,7 +235,6 @@ func getProviders() *C.char {
|
||||
return C.CString(string(data))
|
||||
}
|
||||
|
||||
|
||||
//export getProvider
|
||||
func getProvider(name *C.char) *C.char {
|
||||
providerName := C.GoString(name)
|
||||
|
||||
@@ -74,17 +74,19 @@ class ClashCore {
|
||||
final proxiesRawString = proxiesRaw.cast<Utf8>().toDartString();
|
||||
return Isolate.run<List<Group>>(() {
|
||||
final proxies = json.decode(proxiesRawString);
|
||||
final groupsRaw = (proxies[UsedProxy.GLOBAL.name]["all"] as List)
|
||||
.where((e) {
|
||||
final proxy = proxies[e];
|
||||
final excludeName = !UsedProxyExtension.valueList
|
||||
.where((element) => element != UsedProxy.GLOBAL.name)
|
||||
.contains(proxy['name']);
|
||||
final validType = GroupTypeExtension.valueList.contains(proxy['type']);
|
||||
return excludeName && validType;
|
||||
}).map((groupName) {
|
||||
final groupNames = [
|
||||
UsedProxy.GLOBAL.name,
|
||||
...(proxies[UsedProxy.GLOBAL.name]["all"] as List).where((e) {
|
||||
final proxy = proxies[e];
|
||||
return GroupTypeExtension.valueList.contains(proxy['type']);
|
||||
})
|
||||
];
|
||||
final groupsRaw = groupNames.map((groupName) {
|
||||
final group = proxies[groupName];
|
||||
group["all"] = ((group["all"] ?? []) as List)
|
||||
.where(
|
||||
(name) => !groupNames.contains(groupNames),
|
||||
)
|
||||
.map(
|
||||
(name) => proxies[name],
|
||||
)
|
||||
|
||||
@@ -194,7 +194,7 @@ class _ProxiesTabViewState extends State<ProxiesTabView>
|
||||
_controller.dispose();
|
||||
}
|
||||
|
||||
get group => widget.group;
|
||||
Group get group => widget.group;
|
||||
|
||||
get measure => context.appController.measure;
|
||||
|
||||
@@ -366,25 +366,33 @@ class _ProxiesTabViewState extends State<ProxiesTabView>
|
||||
}) {
|
||||
return SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: AnimateGrid<Proxy>(
|
||||
items: _getProxies(group.all, proxiesSortType),
|
||||
columns: columns,
|
||||
itemHeight: _getItemHeight(),
|
||||
keyBuilder: (item) {
|
||||
return ObjectKey(item);
|
||||
},
|
||||
builder: (_, proxy) {
|
||||
return Selector3<AppState, Config, ClashConfig, String?>(
|
||||
selector: (_, appState, config, clashConfig) =>
|
||||
appState.getCurrentProxyName(
|
||||
config.currentProxyName,
|
||||
clashConfig.mode,
|
||||
),
|
||||
builder: (_, value, __) {
|
||||
final currentProxyName =
|
||||
group.type == GroupType.Selector ? value : group.now;
|
||||
child: Selector3<AppState, Config, ClashConfig, ProxiesCardSelectorState>(
|
||||
selector: (_, appState, config, clashConfig) =>
|
||||
ProxiesCardSelectorState(
|
||||
currentGroupName: appState.getCurrentGroupName(
|
||||
config.currentGroupName,
|
||||
clashConfig.mode,
|
||||
),
|
||||
currentProxyName: appState.getCurrentProxyName(
|
||||
config.currentProxyName,
|
||||
clashConfig.mode,
|
||||
),
|
||||
),
|
||||
builder: (_, state, __) {
|
||||
return AnimateGrid<Proxy>(
|
||||
items: _getProxies(group.all, proxiesSortType),
|
||||
columns: columns,
|
||||
itemHeight: _getItemHeight(),
|
||||
keyBuilder: (item) {
|
||||
return ObjectKey(item);
|
||||
},
|
||||
builder: (_, proxy) {
|
||||
final isSelected = group.type == GroupType.Selector
|
||||
? group.name == state.currentGroupName &&
|
||||
proxy.name == state.currentProxyName
|
||||
: group.now == proxy.name;
|
||||
return _card(
|
||||
isSelected: proxy.name == currentProxyName,
|
||||
isSelected: isSelected,
|
||||
onPressed: () {
|
||||
if (group.type == GroupType.Selector) {
|
||||
final config = context.read<Config>();
|
||||
|
||||
@@ -1887,3 +1887,148 @@ abstract class _ProxiesSelectorState implements ProxiesSelectorState {
|
||||
_$$ProxiesSelectorStateImplCopyWith<_$ProxiesSelectorStateImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ProxiesCardSelectorState {
|
||||
String? get currentGroupName => throw _privateConstructorUsedError;
|
||||
String? get currentProxyName => throw _privateConstructorUsedError;
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
$ProxiesCardSelectorStateCopyWith<ProxiesCardSelectorState> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ProxiesCardSelectorStateCopyWith<$Res> {
|
||||
factory $ProxiesCardSelectorStateCopyWith(ProxiesCardSelectorState value,
|
||||
$Res Function(ProxiesCardSelectorState) then) =
|
||||
_$ProxiesCardSelectorStateCopyWithImpl<$Res, ProxiesCardSelectorState>;
|
||||
@useResult
|
||||
$Res call({String? currentGroupName, String? currentProxyName});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ProxiesCardSelectorStateCopyWithImpl<$Res,
|
||||
$Val extends ProxiesCardSelectorState>
|
||||
implements $ProxiesCardSelectorStateCopyWith<$Res> {
|
||||
_$ProxiesCardSelectorStateCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? currentGroupName = freezed,
|
||||
Object? currentProxyName = freezed,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
currentGroupName: freezed == currentGroupName
|
||||
? _value.currentGroupName
|
||||
: currentGroupName // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
currentProxyName: freezed == currentProxyName
|
||||
? _value.currentProxyName
|
||||
: currentProxyName // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
) as $Val);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ProxiesCardSelectorStateImplCopyWith<$Res>
|
||||
implements $ProxiesCardSelectorStateCopyWith<$Res> {
|
||||
factory _$$ProxiesCardSelectorStateImplCopyWith(
|
||||
_$ProxiesCardSelectorStateImpl value,
|
||||
$Res Function(_$ProxiesCardSelectorStateImpl) then) =
|
||||
__$$ProxiesCardSelectorStateImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call({String? currentGroupName, String? currentProxyName});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ProxiesCardSelectorStateImplCopyWithImpl<$Res>
|
||||
extends _$ProxiesCardSelectorStateCopyWithImpl<$Res,
|
||||
_$ProxiesCardSelectorStateImpl>
|
||||
implements _$$ProxiesCardSelectorStateImplCopyWith<$Res> {
|
||||
__$$ProxiesCardSelectorStateImplCopyWithImpl(
|
||||
_$ProxiesCardSelectorStateImpl _value,
|
||||
$Res Function(_$ProxiesCardSelectorStateImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? currentGroupName = freezed,
|
||||
Object? currentProxyName = freezed,
|
||||
}) {
|
||||
return _then(_$ProxiesCardSelectorStateImpl(
|
||||
currentGroupName: freezed == currentGroupName
|
||||
? _value.currentGroupName
|
||||
: currentGroupName // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
currentProxyName: freezed == currentProxyName
|
||||
? _value.currentProxyName
|
||||
: currentProxyName // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
class _$ProxiesCardSelectorStateImpl implements _ProxiesCardSelectorState {
|
||||
const _$ProxiesCardSelectorStateImpl(
|
||||
{required this.currentGroupName, required this.currentProxyName});
|
||||
|
||||
@override
|
||||
final String? currentGroupName;
|
||||
@override
|
||||
final String? currentProxyName;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ProxiesCardSelectorState(currentGroupName: $currentGroupName, currentProxyName: $currentProxyName)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ProxiesCardSelectorStateImpl &&
|
||||
(identical(other.currentGroupName, currentGroupName) ||
|
||||
other.currentGroupName == currentGroupName) &&
|
||||
(identical(other.currentProxyName, currentProxyName) ||
|
||||
other.currentProxyName == currentProxyName));
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
Object.hash(runtimeType, currentGroupName, currentProxyName);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ProxiesCardSelectorStateImplCopyWith<_$ProxiesCardSelectorStateImpl>
|
||||
get copyWith => __$$ProxiesCardSelectorStateImplCopyWithImpl<
|
||||
_$ProxiesCardSelectorStateImpl>(this, _$identity);
|
||||
}
|
||||
|
||||
abstract class _ProxiesCardSelectorState implements ProxiesCardSelectorState {
|
||||
const factory _ProxiesCardSelectorState(
|
||||
{required final String? currentGroupName,
|
||||
required final String? currentProxyName}) =
|
||||
_$ProxiesCardSelectorStateImpl;
|
||||
|
||||
@override
|
||||
String? get currentGroupName;
|
||||
@override
|
||||
String? get currentProxyName;
|
||||
@override
|
||||
@JsonKey(ignore: true)
|
||||
_$$ProxiesCardSelectorStateImplCopyWith<_$ProxiesCardSelectorStateImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
@@ -111,3 +111,10 @@ class ProxiesSelectorState with _$ProxiesSelectorState{
|
||||
}) = _ProxiesSelectorState;
|
||||
}
|
||||
|
||||
@freezed
|
||||
class ProxiesCardSelectorState with _$ProxiesCardSelectorState{
|
||||
const factory ProxiesCardSelectorState({
|
||||
required String? currentGroupName,
|
||||
required String? currentProxyName,
|
||||
}) = _ProxiesCardSelectorState;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: fl_clash
|
||||
description: A multi-platform proxy client based on ClashMeta, simple and easy to use, open-source and ad-free.
|
||||
publish_to: 'none'
|
||||
version: 0.7.2
|
||||
version: 0.7.7
|
||||
environment:
|
||||
sdk: '>=3.1.0 <4.0.0'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user