import 'package:fl_clash/common/app_localizations.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:provider/provider.dart'; class VPNSwitch extends StatelessWidget { const VPNSwitch({super.key}); @override Widget build(BuildContext context) { return SwitchContainer( info: const Info( label: "VPN", iconData: Icons.stacked_line_chart, ), child: Selector( selector: (_, config) => config.vpnProps.enable, builder: (_, enable, __) { return Switch( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, value: enable, onChanged: (value) { final config = globalState.appController.config; config.vpnProps = config.vpnProps.copyWith( enable: value, ); }, ); }, ), ); } } class TUNSwitch extends StatelessWidget { const TUNSwitch({super.key}); @override Widget build(BuildContext context) { return SwitchContainer( info: Info( label: appLocalizations.tun, iconData: Icons.stacked_line_chart, ), child: Selector( selector: (_, clashConfig) => clashConfig.tun.enable, builder: (_, enable, __) { return Switch( value: enable, onChanged: (value) { final clashConfig = globalState.appController.clashConfig; clashConfig.tun = clashConfig.tun.copyWith( enable: value, ); }, ); }, ), ); } } class ProxySwitch extends StatelessWidget { const ProxySwitch({super.key}); @override Widget build(BuildContext context) { return SwitchContainer( info: Info( label: appLocalizations.systemProxy, iconData: Icons.shuffle, ), child: Selector( selector: (_, config) => config.desktopProps.systemProxy, builder: (_, systemProxy, __) { return Switch( materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, value: systemProxy, onChanged: (value) { final config = globalState.appController.config; config.desktopProps = config.desktopProps.copyWith(systemProxy: value); }, ); }, ), ); } } class SwitchContainer extends StatelessWidget { final Info info; final Widget child; const SwitchContainer({ super.key, required this.info, required this.child, }); @override Widget build(BuildContext context) { return CommonCard( onPressed: () {}, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ InfoHeader( info: info, actions: [ child, ], ), ], ), ); } }