Add linux deb dependencies Add backup recovery strategy select Support custom text scaling Optimize the display of different text scale Optimize windows setup experience Optimize startTun performance Optimize android tv experience Optimize default option Optimize computed text size Optimize hyperOS freeform window Add developer mode Update core Optimize more details
252 lines
7.3 KiB
Dart
252 lines
7.3 KiB
Dart
import 'package:fl_clash/common/common.dart';
|
|
import 'package:fl_clash/fragments/config/network.dart';
|
|
import 'package:fl_clash/providers/config.dart';
|
|
import 'package:fl_clash/widgets/widgets.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
class TUNButton extends StatelessWidget {
|
|
const TUNButton({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SizedBox(
|
|
height: getWidgetHeight(1),
|
|
child: CommonCard(
|
|
onPressed: () {
|
|
showSheet(
|
|
context: context,
|
|
builder: (_, type) {
|
|
return AdaptiveSheetScaffold(
|
|
type: type,
|
|
body: generateListView(
|
|
generateSection(
|
|
items: [
|
|
if (system.isDesktop) const TUNItem(),
|
|
const TunStackItem(),
|
|
],
|
|
),
|
|
),
|
|
title: appLocalizations.tun,
|
|
);
|
|
},
|
|
);
|
|
},
|
|
info: Info(
|
|
label: appLocalizations.tun,
|
|
iconData: Icons.stacked_line_chart,
|
|
),
|
|
child: Container(
|
|
padding: baseInfoEdgeInsets.copyWith(
|
|
top: 4,
|
|
bottom: 8,
|
|
right: 8,
|
|
),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Flexible(
|
|
flex: 1,
|
|
child: TooltipText(
|
|
text: Text(
|
|
appLocalizations.options,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
style: Theme.of(context)
|
|
.textTheme
|
|
.titleSmall
|
|
?.adjustSize(-2)
|
|
.toLight,
|
|
),
|
|
),
|
|
),
|
|
Consumer(
|
|
builder: (_, ref, __) {
|
|
final enable = ref.watch(patchClashConfigProvider
|
|
.select((state) => state.tun.enable));
|
|
return Switch(
|
|
value: enable,
|
|
onChanged: (value) {
|
|
ref.read(patchClashConfigProvider.notifier).updateState(
|
|
(state) => state.copyWith.tun(
|
|
enable: value,
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
)
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class SystemProxyButton extends StatelessWidget {
|
|
const SystemProxyButton({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SizedBox(
|
|
height: getWidgetHeight(1),
|
|
child: CommonCard(
|
|
onPressed: () {
|
|
showSheet(
|
|
context: context,
|
|
builder: (_, type) {
|
|
return AdaptiveSheetScaffold(
|
|
type: type,
|
|
body: generateListView(
|
|
generateSection(
|
|
items: [
|
|
SystemProxyItem(),
|
|
BypassDomainItem(),
|
|
],
|
|
),
|
|
),
|
|
title: appLocalizations.systemProxy,
|
|
);
|
|
},
|
|
);
|
|
},
|
|
info: Info(
|
|
label: appLocalizations.systemProxy,
|
|
iconData: Icons.shuffle,
|
|
),
|
|
child: Container(
|
|
padding: baseInfoEdgeInsets.copyWith(
|
|
top: 4,
|
|
bottom: 8,
|
|
right: 8,
|
|
),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Flexible(
|
|
flex: 1,
|
|
child: TooltipText(
|
|
text: Text(
|
|
appLocalizations.options,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
style: Theme.of(context)
|
|
.textTheme
|
|
.titleSmall
|
|
?.adjustSize(-2)
|
|
.toLight,
|
|
),
|
|
),
|
|
),
|
|
Consumer(
|
|
builder: (_, ref, __) {
|
|
final systemProxy = ref.watch(networkSettingProvider
|
|
.select((state) => state.systemProxy));
|
|
return Switch(
|
|
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
|
value: systemProxy,
|
|
onChanged: (value) {
|
|
ref.read(networkSettingProvider.notifier).updateState(
|
|
(state) => state.copyWith(
|
|
systemProxy: value,
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
)
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class VpnButton extends StatelessWidget {
|
|
const VpnButton({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SizedBox(
|
|
height: getWidgetHeight(1),
|
|
child: CommonCard(
|
|
onPressed: () {
|
|
showSheet(
|
|
context: context,
|
|
builder: (_, type) {
|
|
return AdaptiveSheetScaffold(
|
|
type: type,
|
|
body: generateListView(
|
|
generateSection(
|
|
items: [
|
|
const VPNItem(),
|
|
const VpnSystemProxyItem(),
|
|
const TunStackItem(),
|
|
],
|
|
),
|
|
),
|
|
title: "VPN",
|
|
);
|
|
},
|
|
);
|
|
},
|
|
info: Info(
|
|
label: "VPN",
|
|
iconData: Icons.stacked_line_chart,
|
|
),
|
|
child: Container(
|
|
padding: baseInfoEdgeInsets.copyWith(
|
|
top: 4,
|
|
bottom: 8,
|
|
right: 8,
|
|
),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Flexible(
|
|
flex: 1,
|
|
child: TooltipText(
|
|
text: Text(
|
|
appLocalizations.options,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
style: Theme.of(context)
|
|
.textTheme
|
|
.titleSmall
|
|
?.adjustSize(-2)
|
|
.toLight,
|
|
),
|
|
),
|
|
),
|
|
Consumer(
|
|
builder: (_, ref, __) {
|
|
final enable = ref.watch(
|
|
vpnSettingProvider.select(
|
|
(state) => state.enable,
|
|
),
|
|
);
|
|
return Switch(
|
|
value: enable,
|
|
onChanged: (value) {
|
|
ref.read(vpnSettingProvider.notifier).updateState(
|
|
(state) => state.copyWith(
|
|
enable: value,
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
)
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|