Flutter网络代理配置插件network_proxy的使用

Flutter网络代理配置插件network_proxy的使用

简介

network_proxy 是一个支持获取和设置网络代理状态的插件项目。该插件可以帮助开发者在 Flutter 应用中管理和控制设备的网络代理设置。

使用步骤

1. 初始化插件

首先,在 Flutter 项目中引入 network_proxy 插件。可以通过在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  network_proxy: ^最新版本号

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

2. 获取平台版本

在初始化插件时,可以获取当前平台的版本信息。以下是一个简单的示例代码:

import 'dart:io';

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

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

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

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 获取平台版本
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await _networkProxyPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

3. 获取当前代理配置

可以通过调用 getProxy() 方法来获取当前的代理配置。以下是一个完整的示例代码:

TextButton(
  child: const Text('Get Proxy'),
  onPressed: () async {
    final proxy = NetworkProxy();
    final confList = await proxy.getProxy();
    confList.removeWhere((element) => !element.enable);
    for (final e in confList) {
      print("item $e");
    }
    print("getProxy $confList");
  },
)

4. 设置代理配置

可以通过调用 setProxy() 方法来设置新的代理配置。以下是一个完整的示例代码:

TextField(
  controller: _hostInput,
),
TextField(
  inputFormatters: [
    FilteringTextInputFormatter.allow(RegExp(r'\d+'))
  ],
  controller: _portInput,
),
TextButton(
  child: const Text('Set Proxy'),
  onPressed: () async {
    final proxy = NetworkProxy();
    final result = await proxy.setProxy(
      NetworkProxyConf(
        true,
        NetworkProxyType.http,
        _hostInput.text,
        int.parse(_portInput.text),
        name: 'iPhone USB',
      ),
    );
    print("setProxy $result");
  },
)

完整示例代码

以下是一个完整的示例代码,展示了如何使用 network_proxy 插件来获取和设置代理配置:

import 'dart:io';

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

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _networkProxyPlugin = NetworkProxy();
  final _hostInput = TextEditingController(text: '127.0.0.1');
  final _portInput = TextEditingController(text: '10808');
  NetworkProxyType _type = NetworkProxyType.socks;

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 获取平台版本
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await _networkProxyPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('Running on: $_platformVersion\n'),
              DropdownButton<NetworkProxyType>(
                value: _type,
                items: NetworkProxyType.values
                    .map(
                      (e) => DropdownMenuItem(
                        value: e,
                        child: Text(e.name),
                      ),
                    )
                    .toList(),
                onChanged: (value) {
                  if (value == null) return;
                  _type = value;
                },
              ),
              TextField(
                controller: _hostInput,
              ),
              TextField(
                inputFormatters: [
                  FilteringTextInputFormatter.allow(RegExp(r'\d+'))
                ],
                controller: _portInput,
              ),
              Row(
                children: [
                  TextButton(
                    child: const Text('Get Proxy'),
                    onPressed: () async {
                      final proxy = NetworkProxy();
                      final confList = await proxy.getProxy();
                      confList.removeWhere((element) => !element.enable);
                      for (final e in confList) {
                        print("item $e");
                      }
                      print("getProxy $confList");
                    },
                  ),
                  TextButton(
                    child: const Text('Set Proxy'),
                    onPressed: () async {
                      final proxy = NetworkProxy();
                      final result = await proxy.setProxy(
                        NetworkProxyConf(
                          true,
                          NetworkProxyType.http,
                          _hostInput.text,
                          int.parse(_portInput.text),
                          name: 'iPhone USB',
                        ),
                      );
                      print("setProxy $result");
                    },
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


network_proxy 是一个 Flutter 插件,用于在应用中配置网络代理。它允许你在应用中动态设置代理服务器,以便在需要时通过代理服务器进行网络请求。

1. 安装插件

首先,在你的 pubspec.yaml 文件中添加 network_proxy 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  network_proxy: ^0.1.0  # 请检查最新版本

然后,运行 flutter pub get 来安装插件。

2. 导入插件

在你的 Dart 文件中导入 network_proxy 插件:

import 'package:network_proxy/network_proxy.dart';

3. 配置代理

你可以使用 NetworkProxy 类来配置代理。以下是一个简单的示例,展示如何设置代理服务器:

void configureProxy() async {
  // 创建一个代理配置
  ProxyConfig proxyConfig = ProxyConfig(
    host: 'your.proxy.server.com',  // 代理服务器地址
    port: 8080,                     // 代理服务器端口
    username: 'your_username',      // 代理服务器用户名(可选)
    password: 'your_password',      // 代理服务器密码(可选)
  );

  // 应用代理配置
  await NetworkProxy.setProxy(proxyConfig);

  // 检查代理是否已设置
  bool isProxySet = await NetworkProxy.isProxySet();
  print('Proxy is set: $isProxySet');
}

4. 清除代理

如果你想清除已设置的代理,可以调用 clearProxy 方法:

void clearProxy() async {
  await NetworkProxy.clearProxy();

  // 检查代理是否已清除
  bool isProxySet = await NetworkProxy.isProxySet();
  print('Proxy is set: $isProxySet');
}

5. 检查代理状态

你可以随时检查代理是否已设置:

void checkProxyStatus() async {
  bool isProxySet = await NetworkProxy.isProxySet();
  print('Proxy is set: $isProxySet');
}

6. 注意事项

  • network_proxy 插件目前可能只支持 Android 平台。如果你在 iOS 或其他平台上使用,请检查插件的兼容性。
  • 代理配置可能会影响应用中的所有网络请求,因此请谨慎使用。

7. 示例代码

以下是一个完整的示例,展示如何在应用中配置和清除代理:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Network Proxy Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: configureProxy,
                child: Text('Set Proxy'),
              ),
              ElevatedButton(
                onPressed: clearProxy,
                child: Text('Clear Proxy'),
              ),
              ElevatedButton(
                onPressed: checkProxyStatus,
                child: Text('Check Proxy Status'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void configureProxy() async {
    ProxyConfig proxyConfig = ProxyConfig(
      host: 'your.proxy.server.com',
      port: 8080,
      username: 'your_username',
      password: 'your_password',
    );

    await NetworkProxy.setProxy(proxyConfig);

    bool isProxySet = await NetworkProxy.isProxySet();
    print('Proxy is set: $isProxySet');
  }

  void clearProxy() async {
    await NetworkProxy.clearProxy();

    bool isProxySet = await NetworkProxy.isProxySet();
    print('Proxy is set: $isProxySet');
  }

  void checkProxyStatus() async {
    bool isProxySet = await NetworkProxy.isProxySet();
    print('Proxy is set: $isProxySet');
  }
}
回到顶部