Flutter插件sstp_flutter的使用_SstpFlutter 是一个用于 SSTP VPN 连接的 Flutter 插件

Flutter插件sstp_flutter的使用_SstpFlutter 是一个用于 SSTP VPN 连接的 Flutter 插件

SstpFlutter 是一个用于 SSTP VPN 连接的 Flutter 插件。它提供了一种方便的方式来管理 SSTP VPN 连接,监控连接状态,并配置各种设置。

Flutter插件sstp_flutter特性

  • 连接到 SSTP VPN 服务器
  • 监控连接状态和持续时间
  • 获取下载和上传速度
  • 启用和禁用 DNS
  • 启用和禁用代理
  • 保存服务器数据以便快速连接
  • 检查最后的连接状态
  • 获取已安装的应用并管理允许的应用

Flutter插件sstp_flutter开始使用

要在项目中使用此插件,你需要在 pubspec.yaml 文件中添加 sstp_flutter 作为依赖项。

dependencies:
  sstp_flutter: ^version

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

iOS 设置

1. 添加功能

在 Runner 的目标中添加“网络扩展”功能,并启用“数据包隧道”。

添加功能

2. 添加新目标

点击底部左下角的 + 按钮,选择“NETWORK EXTENSION”。并将语言和提供者类型设置为“Objective-C”和“Packet Tunnel”,如图所示。

添加新目标

3. 为 sstp_extension 添加功能

对上一步创建的新目标(sstp_extension)重复步骤 1。

4. 添加 Pod 依赖

打开你的 Podfile,并添加以下行:

target 'sstp_extension' do
  pod 'vpn_adapter_ios', :git => 'https://github.com/NavidShokoufeh/vpn_adapter_ios.git', :tag => '1.0.0'
end

在你的 Runner 目标中也这样做:

target 'Runner' do
pod 'vpn_adapter_ios', :git => 'https://github.com/NavidShokoufeh/vpn_adapter_ios.git', :tag => '1.0.0'  # 添加这一行
  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  target 'RunnerTests' do
    inherit! :search_paths
  end
end

5. 复制粘贴代码

打开 sstp_extension > PacketTunnelProvider.m 并复制粘贴以下脚本:

PacketTunnelProvider.m

示例

以下是一个完整的示例代码,展示了如何使用该插件进行 SSTP VPN 连接管理。

import 'package:flutter/material.dart';
import 'package:sstp_flutter/sstp_flutter.dart';
import 'package:sstp_flutter/server.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> {
  final sstpFlutterPlugin = SstpFlutter();
  var connectionStatus = "disconnected";
  var certDir = "none";
  var downSpeed = 0;
  var upSpeed = 0;
  Duration connectionTimer = const Duration();

  TextEditingController hostNameController = TextEditingController();
  TextEditingController sslPortController = TextEditingController();
  TextEditingController userNameController = TextEditingController();
  TextEditingController passController = TextEditingController();

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

  init() async {
    connectionStatus = await sstpFlutterPlugin.checkLastConnectionStatus();
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter SSTP example app'),
        ),
        body: Center(
            child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Text("connectionStatus : $connectionStatus"),
                  Text("download Speed : $downSpeed KBps"),
                  Text("upload Speed : $upSpeed KBps"),
                  Text("certificate dir : $certDir"),
                  Text("connection time : $connectionTimer"),
                ],
              ),
              TextField(
                controller: hostNameController,
                decoration: const InputDecoration(hintText: "host name"),
              ),
              TextField(
                controller: sslPortController,
                decoration: const InputDecoration(hintText: "ssl port"),
              ),
              TextField(
                controller: userNameController,
                decoration: const InputDecoration(hintText: "user name"),
              ),
              TextField(
                controller: passController,
                decoration: const InputDecoration(hintText: "password"),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  ElevatedButton(
                      onPressed: () async {
                        SSTPServer server = SSTPServer(
                          host: hostNameController.text,
                          port: int.parse(sslPortController.text),
                          username: userNameController.text,
                          password: passController.text,
                          androidConfiguration: SSTPAndroidConfiguration(
                            verifyHostName: false,
                            useTrustedCert: false,
                            verifySSLCert: false,
                            sslVersion: SSLVersions.TLSv1_1,
                            showDisconnectOnNotification: true,
                            notificationText: "Notification Text Holder",
                          ),
                          iosConfiguration: SSTPIOSConfiguration(
                            enableMSCHAP2: true,
                            enableCHAP: false,
                            enablePAP: false,
                            enableTLS: false,
                          ),
                        );

                        try {
                          await sstpFlutterPlugin.takePermission();
                          await sstpFlutterPlugin.saveServerData(server: server);
                          await sstpFlutterPlugin.connectVpn();
                        } catch (e) {
                          debugPrint(e.toString());
                        }

                        sstpFlutterPlugin.onResult(
                            onConnectedResult: (ConnectionTraffic traffic, Duration duration) {
                              setState(() {
                                connectionTimer = duration;
                                connectionStatus = "connected";
                                downSpeed = traffic.downloadTraffic ?? 0;
                                upSpeed = traffic.uploadTraffic ?? 0;
                              });
                            },
                            onConnectingResult: () {
                              debugPrint("onConnectingResult");
                              setState(() {
                                connectionStatus = "connecting";
                              });
                            },
                            onDisconnectedResult: () {
                              debugPrint("onDisconnectedResult");
                              setState(() {
                                connectionStatus = "disconnected";
                                downSpeed = 0;
                                upSpeed = 0;
                              });
                            },
                            onError: () {});
                      },
                      child: const Text("Connect")),
                  ElevatedButton(
                      onPressed: () async {
                        await sstpFlutterPlugin.disconnect();
                      },
                      child: const Text("Disconnect"))
                ],
              ),
              ElevatedButton(
                  onPressed: () async {
                    certDir = await sstpFlutterPlugin.addCertificate();
                    setState(() {});
                  },
                  child: const Text("Certificate"))
            ],
          ),
        )),
      ),
    );
  }
}

更多关于Flutter插件sstp_flutter的使用_SstpFlutter 是一个用于 SSTP VPN 连接的 Flutter 插件的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件sstp_flutter的使用_SstpFlutter 是一个用于 SSTP VPN 连接的 Flutter 插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


探索和使用Flutter中的未知功能插件(如sstp_flutter)通常涉及几个关键步骤:安装插件、配置项目、调用插件功能以及处理可能的错误。虽然由于我无法直接访问外部资源或插件的详细文档,我将基于一般的Flutter插件使用流程来提供一个示例代码框架。请注意,具体细节(如方法名、参数等)可能需要根据实际插件的文档进行调整。

步骤 1: 安装插件

首先,你需要在pubspec.yaml文件中添加sstp_flutter插件的依赖。如果插件已经在Pub仓库中发布,你可以像这样添加:

dependencies:
  flutter:
    sdk: flutter
  sstp_flutter: ^x.y.z  # 替换为实际版本号

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

步骤 2: 配置项目

对于大多数Flutter插件,通常不需要额外的配置步骤,但总是好的习惯查看插件的README文档,看看是否有特定的配置要求。

步骤 3: 调用插件功能

一旦插件安装并配置好,你就可以在你的Dart代码中导入并使用它。以下是一个假设性的示例,展示如何调用sstp_flutter插件的某个功能(请注意,这里的函数名和参数是假设的,你需要根据插件的实际文档进行替换):

import 'package:flutter/material.dart';
import 'package:sstp_flutter/sstp_flutter.dart';  // 假设这是插件的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SSTP Flutter Plugin Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                // 假设这是插件的一个功能调用
                var result = await SstpFlutter.someFunction('some_parameter');
                // 处理结果
                print('Result from plugin: $result');
              } catch (e) {
                // 处理错误
                print('Error: $e');
              }
            },
            child: Text('Call SSTP Function'),
          ),
        ),
      ),
    );
  }
}

步骤 4: 处理错误和调试

在实际开发中,处理错误和调试是非常重要的。确保你的代码能够优雅地处理插件调用中的异常情况,并使用日志记录来帮助调试。

注意事项

  • 文档阅读:始终阅读插件的官方文档,了解其功能、用法和限制。
  • 权限:某些插件可能需要特定的权限(如网络访问、文件读写等),确保在AndroidManifest.xmlInfo.plist中正确配置这些权限。
  • 兼容性:检查插件是否支持你的目标平台(如iOS、Android)和Flutter版本。

由于sstp_flutter是一个未知插件,以上示例是基于一般Flutter插件使用流程的假设性代码。实际使用时,请根据插件的具体文档和API进行调整。

回到顶部