Flutter USB通信插件hybrid_usb的使用

Flutter USB通信插件hybrid_usb的使用

hybrid_usb

hybrid_usb 是一个用于 Flutter 的插件项目,支持通过 USB 进行设备通信。该插件提供了跨平台的实现代码,适用于 Android 和 iOS。


使用步骤

1. 添加依赖

pubspec.yaml 文件中添加 hybrid_usb 插件依赖:

dependencies:
  hybrid_usb: ^1.0.0

运行以下命令以安装依赖:

flutter pub get

2. 初始化插件

main.dart 中初始化插件并设置监听器。

示例代码

import 'package:flutter/material.dart';
import 'package:hybrid_usb/hybrid_usb.dart'; // 导入插件

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

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

class _MyAppState extends State<MyApp> {
  String _usbStatus = '未连接';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化 USB 通信
    HybridUsb.initialize().then((status) {
      setState(() {
        _usbStatus = status;
      });
    }).catchError((error) {
      setState(() {
        _usbStatus = '初始化失败: $error';
      });
    });

    // 监听 USB 状态变化
    HybridUsb.usbStateChanged.listen((event) {
      setState(() {
        _usbStatus = event ? '已连接' : '未连接';
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('USB 通信示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
            Text('USB 状态: $_usbStatus'), // 显示 USB 状态
          ],
        ),
      ),
    );
  }
}

3. 测试 USB 通信功能

发送数据

Future<void> sendData(String data) async {
  try {
    await HybridUsb.sendData(data);
    print('数据发送成功: $data');
  } catch (e) {
    print('发送数据失败: $e');
  }
}

接收数据

StreamSubscription<String>? _subscription;

[@override](/user/override)
void initState() {
  super.initState();
  
  // 监听接收到的数据
  _subscription = HybridUsb.receivedDataStream.listen((data) {
    print('接收到数据: $data');
  });
}

[@override](/user/override)
void dispose() {
  // 停止监听
  _subscription?.cancel();
  super.dispose();
}

完整示例 Demo

示例代码

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

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

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

class _MyAppState extends State<MyApp> {
  String _usbStatus = '未连接';
  StreamSubscription<String>? _subscription;

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

    // 初始化 USB 通信
    HybridUsb.initialize().then((status) {
      setState(() {
        _usbStatus = status;
      });
    }).catchError((error) {
      setState(() {
        _usbStatus = '初始化失败: $error';
      });
    });

    // 监听 USB 状态变化
    HybridUsb.usbStateChanged.listen((event) {
      setState(() {
        _usbStatus = event ? '已连接' : '未连接';
      });
    });

    // 监听接收到的数据
    _subscription = HybridUsb.receivedDataStream.listen((data) {
      print('接收到数据: $data');
    });
  }

  [@override](/user/override)
  void dispose() {
    // 停止监听
    _subscription?.cancel();
    super.dispose();
  }

  Future<void> sendData(String data) async {
    try {
      await HybridUsb.sendData(data);
      print('数据发送成功: $data');
    } catch (e) {
      print('发送数据失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('USB 通信示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('USB 状态: $_usbStatus'), // 显示 USB 状态
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => sendData('Hello USB!'),
                child: Text('发送数据'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter USB通信插件hybrid_usb的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter USB通信插件hybrid_usb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


hybrid_usb 是一个用于在 Flutter 应用中实现 USB 通信的插件。它允许你与 USB 设备进行通信,支持 Android 和 iOS 平台。以下是如何使用 hybrid_usb 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  hybrid_usb: ^0.0.1  # 检查最新版本

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

2. 配置 Android 项目

在 Android 项目中,你需要添加一些权限和配置:

  • 打开 android/app/src/main/AndroidManifest.xml 文件,添加以下权限:
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-feature android:name="android.hardware.usb.host" />
  • android/app/build.gradle 文件中,确保 minSdkVersion 至少为 21:
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 30
    // 其他配置
}

3. 配置 iOS 项目

在 iOS 项目中,hybrid_usb 插件需要你在 Info.plist 文件中添加一些配置:

  • 打开 ios/Runner/Info.plist 文件,添加以下内容:
<key>UISupportedExternalAccessoryProtocols</key>
<array>
    <string>com.example.protocol</string>  <!-- 替换为你的协议 -->
</array>

4. 使用 hybrid_usb 插件

在你的 Dart 代码中,你可以使用 hybrid_usb 插件来实现 USB 通信。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: UsbCommunicationPage(),
    );
  }
}

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

class _UsbCommunicationPageState extends State<UsbCommunicationPage> {
  String _message = "No message yet";

  Future<void> _sendData() async {
    try {
      // 初始化 USB 通信
      await HybridUsb.init();

      // 打开 USB 设备
      await HybridUsb.openDevice();

      // 发送数据
      List<int> data = [0x01, 0x02, 0x03];  // 示例数据
      await HybridUsb.sendData(data);

      // 接收数据
      List<int> receivedData = await HybridUsb.receiveData();
      setState(() {
        _message = "Received: ${receivedData.toString()}";
      });

      // 关闭 USB 设备
      await HybridUsb.closeDevice();
    } catch (e) {
      setState(() {
        _message = "Error: $e";
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('USB Communication'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_message),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _sendData,
              child: Text('Send Data'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 处理权限

在 Android 上,你可能需要动态请求 USB 权限。你可以在 initState 中处理:

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

Future<void> _requestUsbPermission() async {
  bool hasPermission = await HybridUsb.hasPermission();
  if (!hasPermission) {
    await HybridUsb.requestPermission();
  }
}

6. 处理设备连接

你可能还需要监听 USB 设备的连接和断开事件:

[@override](/user/override)
void initState() {
  super.initState();
  HybridUsb.onDeviceAttached.listen((device) {
    setState(() {
      _message = "Device Attached: $device";
    });
  });
  HybridUsb.onDeviceDetached.listen((device) {
    setState(() {
      _message = "Device Detached: $device";
    });
  });
}
回到顶部