Files
MWClash/lib/views/dashboard/widgets/quick_options.dart
chen08209 ed7868282a Add android separates the core process
Support core status check and force restart

Optimize proxies page and access page

Update flutter and pub dependencies

Update go version

Optimize more details
2025-09-23 15:23:58 +08:00

231 lines
7.0 KiB
Dart

import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/providers/config.dart';
import 'package:fl_clash/views/config/network.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(),
if (system.isMacOS) const AutoSetSystemDnsItem(),
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),
);
},
);
},
),
],
),
),
),
);
}
}