flutter_netbird 1.0.0 copy "flutter_netbird: ^1.0.0" to clipboard
flutter_netbird: ^1.0.0 copied to clipboard

A Flutter FFI plugin for NetBird mesh VPN, providing secure peer-to-peer connectivity, DNS resolution, and HTTP proxy across Android, iOS, macOS, Windows, and Linux.

example/lib/main.dart

/// NetBird Flutter Demo 应用入口
///
/// 仅包含应用框架和 Tab 导航,所有页面逻辑已提取到 screens/ 目录
library;

import 'dart:async';

import 'package:flutter/material.dart';

import 'models/app_state.dart';
import 'screens/home_screen.dart';
import 'screens/http_test_screen.dart';
import 'screens/logs_screen.dart';
import 'screens/peers_screen.dart';
import 'screens/settings_screen.dart';
import 'services/netbird_service.dart';
import 'utils/constants.dart';

void main() {
  runApp(const MaterialApp(home: NetbirdDemoApp()));
}

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

  @override
  State<NetbirdDemoApp> createState() => _NetbirdDemoAppState();
}

class _NetbirdDemoAppState extends State<NetbirdDemoApp> {
  final _service = NetbirdService();

  // 文本输入控制器
  final _setupKeyController = TextEditingController(
    text: "F1A98F6B-3C5F-4511-8981-12C1D4CB4F24",
  );
  final _managementUrlController = TextEditingController(
    text: AppConstants.defaultManagementUrl,
  );
  final _deviceNameController = TextEditingController(
    text: AppConstants.defaultDeviceName,
  );
  final _httpTestUrlController = TextEditingController(
    text: "http://100.83.33.144:8080/api/test",
  );

  // 流订阅
  StreamSubscription<AppState>? _stateSub;
  StreamSubscription<ServiceMessage>? _messageSub;

  @override
  void initState() {
    super.initState();
    _setupServiceListeners();
    _service.setupListeners();
    _service.initialize(
      managementUrl: _managementUrlController.text,
      deviceName: _deviceNameController.text,
    );
  }

  /// 设置服务流监听:状态变化触发 UI 重建,消息通知显示 SnackBar
  void _setupServiceListeners() {
    _stateSub = _service.stateStream.listen((_) {
      if (mounted) setState(() {});
    });

    _messageSub = _service.messageStream.listen((msg) {
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text(msg.text),
          backgroundColor: _getMessageColor(msg.type),
          duration: const Duration(seconds: 3),
        ),
      );
    });
  }

  Color _getMessageColor(ServiceMessageType type) {
    return switch (type) {
      ServiceMessageType.info => Colors.blue,
      ServiceMessageType.success => Colors.green,
      ServiceMessageType.warning => Colors.orange,
      ServiceMessageType.error => Colors.red,
    };
  }

  @override
  void dispose() {
    _stateSub?.cancel();
    _messageSub?.cancel();
    _service.dispose();
    super.dispose();
  }

  /// 连接到 NetBird 网络(如果 SDK 未初始化则自动重新初始化)
  Future<void> _connect() async {
    if (!_service.isInitialized) {
      await _service.reinitialize(
        managementUrl: _managementUrlController.text,
        deviceName: _deviceNameController.text,
      );
      if (!_service.isInitialized) return;
    }
    await _service.connect(setupKey: _setupKeyController.text.trim());
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 5,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('NetBird Flutter Demo'),
          bottom: const TabBar(
            isScrollable: true,
            tabs: [
              Tab(icon: Icon(Icons.home), text: 'Home'),
              Tab(icon: Icon(Icons.people), text: 'Peers'),
              Tab(icon: Icon(Icons.http), text: 'HTTP Test'),
              Tab(icon: Icon(Icons.list_alt), text: 'Logs'),
              Tab(icon: Icon(Icons.settings), text: 'Settings'),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            HomeScreen(
              service: _service,
              setupKeyController: _setupKeyController,
              managementUrlController: _managementUrlController,
              onConnect: _connect,
              onDisconnect: _service.disconnect,
            ),
            PeersScreen(service: _service),
            HttpTestScreen(
              service: _service,
              urlController: _httpTestUrlController,
            ),
            LogsScreen(service: _service),
            SettingsScreen(
              service: _service,
              managementUrlController: _managementUrlController,
              deviceNameController: _deviceNameController,
            ),
          ],
        ),
      ),
    );
  }
}
0
likes
0
points
54
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter FFI plugin for NetBird mesh VPN, providing secure peer-to-peer connectivity, DNS resolution, and HTTP proxy across Android, iOS, macOS, Windows, and Linux.

License

unknown (license)

Dependencies

ffi, flutter, plugin_platform_interface

More

Packages that depend on flutter_netbird

Packages that implement flutter_netbird