Flutter网络代理管理插件proxy_manager的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter网络代理管理插件proxy_manager的使用

简介

proxy_manager 是一个用于在 Flutter 应用中管理和设置系统代理的插件。它支持所有桌面平台(Windows、Linux (KDE/GNOME/DDE) 和 macOS)。

pub-image

功能

  • 设置或清除所有桌面平台的系统代理设置
    • Windows
    • Linux (KDE/GNOME/DDE)
    • macOS

示例

基本用法

// 单例实例
ProxyManager manager = ProxyManager();

// 设置 HTTP 代理
await manager.setAsSystemProxy(ProxyTypes.http, "127.0.0.1", 1087);

// 设置 HTTPS 代理
await manager.setAsSystemProxy(ProxyTypes.https, "127.0.0.1", 1087);

// 设置 SOCKS4/5 代理
await manager.setAsSystemProxy(ProxyTypes.socks, "127.0.0.1", 1080);

完整示例

以下是一个完整的示例应用,展示了如何在 Flutter 应用中使用 proxy_manager 插件。

main.dart

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:proxy_manager/proxy_manager.dart';

final proxyManager = ProxyManager();

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _proxyManagerPlugin = ProxyManager();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在一个异步方法中初始化
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,所以我们使用 try/catch 来处理 PlatformException
    // 我们还处理了消息可能返回 null 的情况
    try {
      platformVersion = await _proxyManagerPlugin.getPlatformVersion() ??
          'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果小部件在异步平台消息传输过程中被从树中移除,我们希望丢弃回复而不是调用 setState 更新我们不存在的外观
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('Running on: $_platformVersion\n'),
              ElevatedButton(
                onPressed: () async {
                  await _proxyManagerPlugin.setAsSystemProxy(ProxyTypes.http, "127.0.0.1", 1087);
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('HTTP proxy set to 127.0.0.1:1087')),
                  );
                },
                child: Text('Set HTTP Proxy'),
              ),
              ElevatedButton(
                onPressed: () async {
                  await _proxyManagerPlugin.setAsSystemProxy(ProxyTypes.https, "127.0.0.1", 1087);
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('HTTPS proxy set to 127.0.0.1:1087')),
                  );
                },
                child: Text('Set HTTPS Proxy'),
              ),
              ElevatedButton(
                onPressed: () async {
                  await _proxyManagerPlugin.setAsSystemProxy(ProxyTypes.socks, "127.0.0.1", 1080);
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('SOCKS proxy set to 127.0.0.1:1080')),
                  );
                },
                child: Text('Set SOCKS Proxy'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

说明

  1. 导入依赖:首先导入 flutterproxy_manager 包。
  2. 创建单例实例:创建 ProxyManager 的单例实例。
  3. 初始化平台状态:在 initState 方法中初始化平台状态,获取平台版本信息。
  4. 设置代理:在 build 方法中添加按钮,点击按钮时设置不同类型的代理,并显示提示信息。

通过以上步骤,你可以在 Flutter 应用中轻松管理和设置系统代理。希望这个示例对你有所帮助!


更多关于Flutter网络代理管理插件proxy_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络代理管理插件proxy_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用proxy_manager插件来管理网络代理的示例代码。这个插件允许你在Flutter应用中动态配置和管理HTTP/HTTPS代理。

首先,你需要在你的pubspec.yaml文件中添加proxy_manager依赖:

dependencies:
  flutter:
    sdk: flutter
  proxy_manager: ^最新版本号  # 请替换为实际发布的最新版本号

然后运行flutter pub get来安装依赖。

接下来是示例代码,展示如何在Flutter中使用proxy_manager来设置和获取代理配置。

主文件 main.dart

import 'package:flutter/material.dart';
import 'package:proxy_manager/proxy_manager.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Proxy Manager Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ProxyManagerDemo(),
    );
  }
}

class ProxyManagerDemo extends StatefulWidget {
  @override
  _ProxyManagerDemoState createState() => _ProxyManagerDemoState();
}

class _ProxyManagerDemoState extends State<ProxyManagerDemo> {
  String proxyStatus = "No proxy set";

  @override
  void initState() {
    super.initState();
    _checkCurrentProxy();
  }

  Future<void> _checkCurrentProxy() async {
    ProxyManager proxyManager = ProxyManager();
    try {
      var proxyConfig = await proxyManager.getProxyConfig();
      setState(() {
        proxyStatus = "Current Proxy: ${proxyConfig.proxy}";
      });
    } catch (e) {
      setState(() {
        proxyStatus = "Failed to get proxy config: $e";
      });
    }
  }

  Future<void> _setProxy() async {
    ProxyManager proxyManager = ProxyManager();
    ProxyConfig proxyConfig = ProxyConfig(
      proxy: "http://your-proxy-server:port",  // 替换为你的代理服务器地址和端口
      bypass: "localhost,127.0.0.1",  // 逗号分隔的不需要代理的地址列表
    );
    try {
      await proxyManager.setProxyConfig(proxyConfig);
      setState(() {
        proxyStatus = "Proxy set successfully!";
      });
    } catch (e) {
      setState(() {
        proxyStatus = "Failed to set proxy: $e";
      });
    }
  }

  Future<void> _clearProxy() async {
    ProxyManager proxyManager = ProxyManager();
    try {
      await proxyManager.clearProxyConfig();
      setState(() {
        proxyStatus = "Proxy cleared successfully!";
      });
    } catch (e) {
      setState(() {
        proxyStatus = "Failed to clear proxy: $e";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Proxy Manager Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Proxy Status:', style: TextStyle(fontSize: 18)),
            Text(proxyStatus, style: TextStyle(fontSize: 16)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _setProxy,
              child: Text('Set Proxy'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _clearProxy,
              child: Text('Clear Proxy'),
            ),
          ],
        ),
      ),
    );
  }
}

说明

  1. 初始化状态:在initState方法中调用_checkCurrentProxy来检查当前的代理配置。
  2. 设置代理_setProxy方法使用ProxyConfig对象来设置代理服务器地址和不需要代理的地址列表,然后调用setProxyConfig方法。
  3. 清除代理_clearProxy方法调用clearProxyConfig来清除当前的代理配置。
  4. UI显示:使用TextElevatedButton来显示当前的代理状态和提供设置/清除代理的按钮。

请注意,proxy_manager插件可能需要特定的权限和配置才能在Android和iOS上正常工作。确保按照插件的文档进行相应的配置。

希望这个示例代码能够帮助你在Flutter项目中有效地使用proxy_manager插件。

回到顶部