当前位置: 首页 > article >正文

Flutter-发现局域网中的设备

前言

现在有一个需求:要能够获取到局域网中的遮阳帘设备。通过搜索发现flutter_mdns_plugin可以满足这个需求

Pub:flutter_mdns_plugin | Flutter package

GitHub:https://github.com/terrabythia/flutter_mdns_plugin

MDNS服务类型

要根据不同的MDNS服务类型来发现对应的设备

服务类型参考:mDNS的服务类型

全部代码

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

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

  @override
  State<MyApp1> createState() => _MyApp1State();
}

class _MyApp1State extends State<MyApp1> {
  List<String> devices = [];
  bool isScanning = false;
  List<String> messageLog = <String>[];

	//设备扫描函数
  Future<void> scanDevices() async {
    setState(() {
      isScanning = true;
      devices.clear();
    });

    const String serviceType = '_http._tcp';
    DiscoveryCallbacks discoveryCallbacks = DiscoveryCallbacks(
      onDiscovered: (ServiceInfo info) {
        print("Discovered ${info.toString()}");
      },
      onDiscoveryStarted: () {
        print("Discovery started");
      },
      onDiscoveryStopped: () {
        print("Discovery stopped");
      },
      onResolved: (ServiceInfo info) {
        print("Resolved Service ${info.toString()}");
        setState(() {
          devices.add(info.toString());
        });
      },
    );

    final mdnsPlugin =  FlutterMdnsPlugin(discoveryCallbacks: discoveryCallbacks);

    try {
      await mdnsPlugin.startDiscovery(serviceType);

      await Future.delayed(const Duration(seconds: 1)); // 扫描5秒钟

      await mdnsPlugin.stopDiscovery();
    } catch (e) {
      print('Error during device scan: $e');
    }

    setState(() {
      isScanning = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Device Scanner'),
      ),
      body: Column(
        children: [
          ElevatedButton(
            onPressed: isScanning ? null : scanDevices,
            child: const Text('Scan Devices'),
          ),
          const SizedBox(height: 16),
          if (isScanning)
            const CircularProgressIndicator()
          else if (devices.isEmpty)
            Text('No devices found.')
          else
            Expanded(
              child: ListView.builder(
                itemCount: devices.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(devices[index]),
                  );
                },
              ),
            ),
        ],
      ),
    );
  }
}


http://www.kler.cn/a/350027.html

相关文章:

  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • PHP礼品兑换系统小程序
  • Kotlin基础知识学习(三)
  • 重新理解tech lead角色
  • 7.8 ChatGPT 开发者模式实战:第三方天气查询平台对接,如何打造爆款天气应用?
  • 特殊类设计
  • 使用Qwen千问大模型和LangChain打造RAG应用
  • QObject: Cannot create children for a parent that is in a different thread
  • mysql 慢查询记录
  • docker网络管理详解 一
  • 各种软件学习版本Mark 长更
  • springBoot 实现 cas身份认证登录
  • 【计算机网络】详解IP协议网段划分路由转发子网掩码网络号
  • 78天闭门深造1258页SpringCloud学习进阶笔记,再战蚂蚁金服
  • C++中的引用详解
  • SpringCloud学习:Maven父工程创建、微服务工程化编写步骤(约定 > 配置 > 编码)
  • MySQL面试题-为什么用了索引就会加快查询
  • Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现
  • 小米路由器R3Gv2安装openwrt记录
  • 关于使用若依并快速构建系统的操作指南
  • 厨房老鼠数据集:掀起餐饮卫生监测的科技浪潮
  • 线段树合并基础
  • 基于vue框架的的宠物领养系统xu2hg(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 在Luckysheet中嵌入图表
  • 自养号测评:希音Shein商家提升转化率的有效策略
  • 前端怎么实现电子签名