flutter_libserialport 0.4.0 flutter_libserialport: ^0.4.0 copied to clipboard
A simple wrapper around libserialport utilizing Flutter's build system to build and deploy the C-library for the target platform.
import 'package:flutter/material.dart';
import 'package:flutter_libserialport/flutter_libserialport.dart';
void main() => runApp(ExampleApp());
class ExampleApp extends StatefulWidget {
@override
_ExampleAppState createState() => _ExampleAppState();
}
extension IntToString on int {
String toHex() => '0x${toRadixString(16)}';
String toPadded([int width = 3]) => toString().padLeft(width, '0');
String toTransport() {
switch (this) {
case SerialPortTransport.usb:
return 'USB';
case SerialPortTransport.bluetooth:
return 'Bluetooth';
case SerialPortTransport.native:
return 'Native';
default:
return 'Unknown';
}
}
}
class _ExampleAppState extends State<ExampleApp> {
var availablePorts = [];
@override
void initState() {
super.initState();
initPorts();
}
void initPorts() {
setState(() => availablePorts = SerialPort.availablePorts);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Serial Port example'),
),
body: Scrollbar(
child: ListView(
children: [
for (final address in availablePorts)
Builder(builder: (context) {
final port = SerialPort(address);
return ExpansionTile(
title: Text(address),
children: [
CardListTile('Description', port.description),
CardListTile('Transport', port.transport.toTransport()),
CardListTile('USB Bus', port.busNumber?.toPadded()),
CardListTile('USB Device', port.deviceNumber?.toPadded()),
CardListTile('Vendor ID', port.vendorId?.toHex()),
CardListTile('Product ID', port.productId?.toHex()),
CardListTile('Manufacturer', port.manufacturer),
CardListTile('Product Name', port.productName),
CardListTile('Serial Number', port.serialNumber),
CardListTile('MAC Address', port.macAddress),
],
);
}),
],
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.refresh),
onPressed: initPorts,
),
),
);
}
}
class CardListTile extends StatelessWidget {
final String name;
final String? value;
CardListTile(this.name, this.value);
@override
Widget build(BuildContext context) {
return Card(
child: ListTile(
title: Text(value ?? 'N/A'),
subtitle: Text(name),
),
);
}
}