я использую библиотеку flutter_reactive_ble для связи с моей печатью. Она работает нормально, но если я нажму, чтобы запустить сканирование устройств, она больше не сможет остановиться.
Я публикую здесь свои коды:
void searchingDevice() {
print('searching device');
try {
scanStream= flutterReactiveBle.scanForDevices(withServices: [], scanMode: ScanMode.lowLatency).listen((device) {
if (device.name != "") {
_addDeviceTolist(device.id, device.name);
}
}, onError: (e) {
print(e.name);
//code for handling error
});
} catch (e) {
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: Text('ALARME'),
content: Text(e.toString()),
);
});
}
}
Future<void> refresh() async {
searchingDevice();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Text('BLUETOOTH DEVICE'),
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () =>
Navigator.pushNamed(context, bluetoothState.routeName),
// connectBlue("04F9F6C0-04F3-FB6A-9DA7-48AC0BD087C6"),
),
),
body: RefreshIndicator(
onRefresh: () async {
refresh();
},
child: ListView.builder(
itemCount: devices.length,
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
border: Border.all(),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(devices[index].deviceName!),
Text(devices[index].id!),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children:<Widget>[ElevatedButton(onPressed: () async{
connectDeviceId=devices[index].id.toString();
connectBlue(connectDeviceId);
await storage.write(key: 'bluetoothDevice', value: connectDeviceId);
await Future.delayed(const Duration(seconds: 1));
// Navigator.pop(context);
//Navigator.of(context).pop();
//Navigator.pushNamed(context, bluetoothState.routeName);
}, child: Text('CONNECT'))] )
],
),
);
}),
),
),
);
Поэтому, если я нажимаю кнопку для обновления, это дает мне ошибку, потому что я думаю, что, возможно, в фоновом режиме устройство все еще сканирует.
Заранее спасибо и с наилучшими пожеланиями
Большое спасибо, это ответ, еще раз спасибо. Можете ли вы поставить его как ответ?





После этого звонка в подписку больше не приходят события.
Возможно, стрим потребуется отключить источник событий и очистить его после отмены подписки.
Возвращает будущее, которое завершается после завершения очистки потока.
Рад, что вы смогли решить свой вопрос!
Отвечает ли это на ваш вопрос? github.com/PhilipsHue/flutter_reactive_ble/issues/…