Flutter Wi-Fi直连插件wifip2p的使用

Flutter Wi-Fi直连插件wifip2p的使用

本项目是一个新的Flutter插件项目,旨在为Android和/或iOS平台提供特定的实现代码。此插件可以帮助开发者在应用中实现Wi-Fi直连功能。

开始使用

如果你刚刚开始使用Flutter,可以查看官方文档以获取教程、示例、移动开发指南和完整的API引用。

示例代码

以下是一个简单的示例代码,展示了如何使用wifip2p插件来控制Wi-Fi状态和发现设备。

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

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _currentWifiStatus = false;
  List<String> dummyList = [""];
  String errorString = ">>> PlatformException occurs <<<";
  TextEditingController sendTextController = TextEditingController();
  String sendText = "";

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

  Future<void> connectToDevice(int position) async {
    try {
      await WifiP2P.connectToDevice(position);
    } on PlatformException {
      print(errorString);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Wi-Fi 控制应用'),
        ),
        body: Column(
          children: [
            Expanded(
              child: SingleChildScrollView(
                child: Column(
                  children: <Widget>[
                    SizedBox(height: 10.0),
                    StreamBuilder(
                        stream: WifiP2P.connectionChangeEvent,
                        builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
                          if (snapshot.hasData) {
                            return Text(
                                "连接状态: ${snapshot.data! ? "已连接" : "未连接"}",
                                style: TextStyle(fontSize: 22.0));
                          } else {
                            return Text("连接状态: 未知", style: TextStyle(fontSize: 22.0));
                          }
                        }),
                    StreamBuilder(
                        stream: WifiP2P.receiveData,
                        builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                          return Text(
                              snapshot.hasData ? snapshot.data! : "消息");
                        }),
                    SizedBox(height: 40.0),
                    StreamBuilder(
                      stream: WifiP2P.wifiStateChangeEvent,
                      builder: (BuildContext context, AsyncSnapshot snapshot) {
                        if (snapshot.hasData) {
                          return Text(
                              "WIFI 状态: ${(snapshot.data!) ? "开启" : "关闭"}",
                              style: TextStyle(fontSize: 20.0));
                        } else {
                          return Text("WIFI 状态: 未知");
                        }
                      },
                    ),
                    ElevatedButton(
                      child: Text("WIFI ${_currentWifiStatus ? "开启" : "关闭"}"),
                      onPressed: () async {
                        bool currentWifiStatus = false;
                        print("wifi 按钮被按下");
                        try {
                          currentWifiStatus = await WifiP2P.toggleWifiState();
                        } on PlatformException {
                          print(errorString);
                        }
                        setState(() {
                          _currentWifiStatus = currentWifiStatus;
                        });
                      },
                    ),
                    ElevatedButton(
                      child: Text("发现设备"),
                      onPressed: () async {
                        try {
                          await WifiP2P.discoverDevices();
                        } on PlatformException {
                          print(errorString);
                        }
                      },
                    ),
                    StreamBuilder(
                        stream: WifiP2P.peerListChangeEvent,
                        builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) {
                          if (snapshot.hasData) {
                            List<TextButton> list = [];
                            for (int i = 0; i < snapshot.data!.length; i++) {
                              list.add(TextButton(
                                  onPressed: () {
                                    connectToDevice(i);
                                  },
                                  child: Text(snapshot.data![i])));
                            }
                            return Column(children: list);
                          }
                          return Text("无名称");
                        }),
                    Padding(
                        padding: EdgeInsets.only(top: 20.0),
                        child: Text(sendText)),
                  ],
                ),
              ),
            ),
            Row(
              children: <Widget>[
                Expanded(
                  child: Padding(
                    padding: EdgeInsets.symmetric(horizontal: 10.0),
                    child: Container(
                      padding: EdgeInsets.symmetric(horizontal: 20.0),
                      decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(25.0),
                        border: Border.all(color: Colors.blue),
                        boxShadow: [
                          BoxShadow(
                            color: Colors.blue.withAlpha(50),
                            offset: Offset(0, 10),
                            blurRadius: 10.0,
                            spreadRadius: -5.0,
                          ),
                          BoxShadow(
                            color: Colors.blue.withAlpha(5),
                            offset: Offset(-10, -10),
                            blurRadius: 10.0,
                            spreadRadius: -5.0,
                          ),
                        ],
                      ),
                      child: TextField(
                        style: TextStyle(decoration: TextDecoration.none),
                        controller: sendTextController,
                        cursorHeight: 25.0,
                        decoration: InputDecoration(border: InputBorder.none),
                      ),
                    ),
                  ),
                ),
                GestureDetector(
                  onTap: () async {
                    sendText = sendTextController.text;
                    setState(() {});
                    try {
                      await WifiP2P.sendData(sendText);
                    } on PlatformException {
                      print(errorString);
                    }
                  },
                  child: Container(
                    margin: EdgeInsets.only(right: 10.0),
                    height: 55.0,
                    width: 55.0,
                    decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(25.0),
                      border: Border.all(color: Colors.blue),
                      boxShadow: [
                        BoxShadow(
                          color: Colors.blue.withAlpha(100),
                          offset: Offset(0, 10),
                          blurRadius: 10.0,
                          spreadRadius: -5.0,
                        ),
                        BoxShadow(
                          color: Colors.blue.withAlpha(5),
                          offset: Offset(-10, -10),
                          blurRadius: 10.0,
                          spreadRadius: -5.0,
                        ),
                      ],
                    ),
                    child: Icon(Icons.send),
                  ),
                )
              ],
            ),
            SizedBox(height: 20.0),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter Wi-Fi直连插件wifip2p的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Wi-Fi直连插件wifip2p的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


wifip2p 是一个用于在 Flutter 应用中实现 Wi-Fi Direct(Wi-Fi 直连)功能的插件。它允许设备之间直接进行通信,而无需通过传统的Wi-Fi网络或互联网。以下是如何在 Flutter 项目中使用 wifip2p 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  wifip2p: ^0.0.1  # 请检查最新版本号

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在你的 Dart 文件中导入 wifip2p 插件并初始化:

import 'package:wifip2p/wifip2p.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WifiP2PExample(),
    );
  }
}

class WifiP2PExample extends StatefulWidget {
  @override
  _WifiP2PExampleState createState() => _WifiP2PExampleState();
}

class _WifiP2PExampleState extends State<WifiP2PExample> {
  WifiP2p _wifiP2p = WifiP2p();

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

  void _initWifiP2p() async {
    await _wifiP2p.initialize();
    // 在这里可以添加其他初始化代码
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Wi-Fi Direct Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _discoverPeers,
              child: Text('Discover Peers'),
            ),
            ElevatedButton(
              onPressed: _connectToPeer,
              child: Text('Connect to Peer'),
            ),
          ],
        ),
      ),
    );
  }

  void _discoverPeers() async {
    await _wifiP2p.discoverPeers();
    // 处理发现的设备
  }

  void _connectToPeer() async {
    // 假设你已经有一个设备地址
    String deviceAddress = "XX:XX:XX:XX:XX:XX"; // 替换为实际设备地址
    await _wifiP2p.connect(deviceAddress);
    // 处理连接结果
  }
}

3. 发现设备

使用 _wifiP2p.discoverPeers() 方法来发现附近的 Wi-Fi Direct 设备。你可以通过监听发现到的设备列表来处理这些设备。

4. 连接到设备

使用 _wifiP2p.connect(deviceAddress) 方法来连接到一个特定的设备。你需要提供设备的 MAC 地址或其他唯一标识符。

5. 处理连接

连接成功后,你可以通过 _wifiP2p 插件提供的其他方法来发送和接收数据,或者进行其他操作。

6. 权限配置

确保在 AndroidManifest.xml 中添加必要的权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
回到顶部