Files
MWClash/lib/fragments/dashboard/outbound_mode.dart
chen08209 a134c32493 Update kernel
Add import profile via QR code image
2024-05-15 20:21:02 +08:00

81 lines
2.7 KiB
Dart

import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/models.dart';
import 'package:fl_clash/state.dart';
import 'package:fl_clash/widgets/widgets.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class OutboundMode extends StatelessWidget {
const OutboundMode({super.key});
_changeMode(BuildContext context, Mode? value) async {
final appController = globalState.appController;
final clashConfig = appController.clashConfig;
final config = appController.config;
if (value == null || clashConfig.mode == value) return;
clashConfig.mode = value;
await appController.updateClashConfig();
if (!config.isCompatible) {
final proxySelected = config.currentSelectedMap[GroupName.Proxy.name];
final globalSelected = config.currentSelectedMap[GroupName.GLOBAL.name];
if (proxySelected != null && globalSelected == null) {
config.updateCurrentSelectedMap(GroupName.GLOBAL.name, proxySelected);
}
}
appController.changeProxy();
}
@override
Widget build(BuildContext context) {
return Selector<ClashConfig, Mode>(
selector: (_, clashConfig) => clashConfig.mode,
builder: (_, mode, __) {
return CommonCard(
info: Info(
label: appLocalizations.outboundMode,
iconData: Icons.call_split,
),
child: Padding(
padding: const EdgeInsets.only(bottom: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
for (final item in Mode.values)
ListItem.radio(
horizontalTitleGap: 4,
prue: true,
padding: const EdgeInsets.only(
left: 12,
right: 16,
top: 8,
bottom: 8,
),
delegate: RadioDelegate(
value: item,
groupValue: mode,
onChanged: (value) async {
_changeMode(context, value);
},
),
title: Text(
Intl.message(item.name),
style: Theme
.of(context)
.textTheme
.titleMedium
?.toSoftBold(),
),
),
],
),
),
);
},
);
}
}