flutter_bt_printer 0.0.2
flutter_bt_printer: ^0.0.2 copied to clipboard
Bluetooth Printer Plugin.
example/lib/main.dart
import 'dart:ffi';
import 'package:btprinter/btprinter_platform_interface.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:btprinter/btprinter.dart';
import 'package:flutter_blue/flutter_blue.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const platform = MethodChannel('example.com/value');
final _btprinterPlugin = Btprinter();
List<String?> _devices = [];
final GlobalKey<ScaffoldState> _scaffoldKey =
GlobalKey<ScaffoldState>(); // Scaffold의 key
@override
void initState() {
super.initState();
initBle();
}
void initBle() async {
// Request BLE permissions from MainActivity
await _getBle();
}
Future<void> _getBle() async {
String value;
try {
value = await platform.invokeMethod('getBle');
} on PlatformException catch (e) {
value = 'native code error: ${e.message}';
}
print(value);
_showSnackBar(value, value == "success" ? true : false);
}
Future<void> _print(String? device) async {
List<String> deviceInfo = device!.split('(');
String logicalName = deviceInfo[0].split("_")[0].trim();
String address = deviceInfo[1].replaceAll(')', '').trim();
String? value;
try {
value = await _btprinterPlugin.printText(
"민지해린혜인하니다녤 /(> x <)\\n\n", logicalName, address);
} on PlatformException catch (e) {
value = "기기연결을 확인하세요: ${e.message}";
}
print(value);
_showSnackBar(value!, value == "success" ? true : false);
}
void _getPairedDevices() async {
String value;
try {
List<Object?> devices = await platform.invokeMethod("getPairedDevices");
setState(() {
// _devices = List<String>.from(devices);
_devices = devices
.cast<String>()
.where((device) => device.startsWith('SPP')) //SPP로 시작하는 장치만 가져옴
.toList();
});
} on PlatformException catch (e) {
value = "플러그인 호출 실패: ${e.message}";
print(value);
_showSnackBar(value, false);
}
}
void _showSnackBar(String message, bool isSuccess) {
final snackBar = SnackBar(
content: Text(message),
duration: const Duration(seconds: 5),
behavior: SnackBarBehavior.floating,
shape: const StadiumBorder(),
backgroundColor: Colors.blue,
);
final errSnackBar = SnackBar(
content: Text(message),
duration: const Duration(seconds: 5),
behavior: SnackBarBehavior.floating,
shape: const StadiumBorder(),
backgroundColor: Colors.red,
);
if (isSuccess) {
ScaffoldMessenger.of(_scaffoldKey.currentContext!).showSnackBar(snackBar);
} else {
ScaffoldMessenger.of(_scaffoldKey.currentContext!)
.showSnackBar(errSnackBar);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
key: _scaffoldKey, //Scaffold에 key 할당
appBar: AppBar(
title: const Text('Bluetooth Device List'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _getPairedDevices,
child: const Text('블루투스 기기 목록 조회')),
Container(
height: 200,
child: _devices == null || _devices.isEmpty
? const Center(
child: Text('연결된 기기를 찾을 수 없습니다.'),
)
: ListView.builder(
itemCount: _devices.length,
itemBuilder: (context, index) {
String? deviceName =
_devices[index]?.split('(')[0].trim();
return ListTile(
title: Text(deviceName ?? ''),
onTap: () => _print(_devices[index]),
);
},
),
)
],
),
),
),
);
}
}