最近工作上使用 Flutter 開發一套語一個藍芽玩具搭配的手機 app,很自然地使用 flutter_blue_plus 這個套件處理與藍芽裝置連線的部分,然後踩到一個小小的雷。我們來看一下這段程式: device.state.listen((event) {
if (event == BluetoothDeviceState.disconnecting) {}
if (event == BluetoothDeviceState.disconnected) {}
if (event == BluetoothDeviceState.connected) {}
});
device.connect(); 簡單講就是,我對一個代表藍芽裝置的物件 device,先設定一個 lisener 監聽狀態的改變(state 是一個 Stream),然後開始要求連線。我原本預期應該在真的呼叫了 connect() 之後,這個 listener 才會開始收到東西,因為直接閱讀這段程式的時候,感覺起來,如果沒有呼叫 connect()、disconnect() 之類的 method,不該有任何造成狀態改變的原因,而既然狀態沒有改變,就不會觸發 listener 才對。