flutter_blueでスキャンが上手くいかない、コネクトできてもServiceが取得できない


flutterで開発を行っております。

bluetoothを使用したアプリを作成しているのですが、flutter_blueを用いた実装が全く上手く行きません。。  
bluetoothを使用するのは初めてで、至らない点や知識不足な点があれば、ご指摘いただければと思います。

スマホ：Android9  
flutter_blue: ^0.7.2

1、スキャンが上手くいかない

ダイソーで購入したBluetoothシャッターを使用して、ボタンを押した時に特定の動作をさせようと考えているのですが、  
startscanを行っても、ほとんどの確率でダイソーシャッターのdeviceが取得できません。  
なぜか、OFF→ONを行った直後にスキャンを行うと、上手く取得できることがあります。

2、Serviceが上手く取得できない  
上手くスキャンができ、コネクトが上手くいった場合（なぜかスキャンが上手く行く時はコネクトが既にされています…）、Serviceを取得し、Notifyによりシャッターボタンが押された時に特定の動作をさせようと目論んでいるのですが、  
ServiceのListは常にlength 0（何も取得できていない）が返ってきます。。  
ダイソーのBluetoothだからServiceが無いということがあるのでしょうか…？

上記２点がいくらやっても上手くいかず、質問をするに至りました。  
また、スマホ自体のBluetoothでダイソーシャッターへの接続は毎回上手くいきます。なのにアプリだとスキャンにも含まれないことがほとんどです。。  
また、どうやらスマホにBluetoothでダイソーシャッターを繋いでいる時はスキャンに必ずと言っていいほど含まれません。繋がってるのに！

以下に今まで奮闘したコードを記載します。  
もし少しでも気になることがありましたら、コメントいただけると幸いです。  
ご回答の程、よろしくお願いします！！  
(他の質問サイトでも質問させていただいています！)

[code]

    　　// スキャンを開始
        try {
          flutterBlue.isOn.then((bool isOn) {
            if (isOn) {
              flutterBlue.isScanning.first.then((isScanning) async {
                if (!isScanning) {
                  await startScanning();
                }
              });
            } else {
              Fluttertoast.showToast(msg: 'BluetoothをONにしてください');
            }
          });
        } on Exception catch (e) {
          print('start scan error:$e');
        }
    
        return SafeArea(
            child: Column(
              children: <Widget>[
    　　　　　　　// ここのscanResultsになぜかダイソーシャッターが引っかからないときがある…
                StreamBuilder<List<ScanResult>>(
                  stream: flutterBlue.scanResults,
                  builder: (context, snapshot) {
                    //　コネクト可能なものに絞る
                    final scanList = snapshot.data
                        .where((scanResult) =>
                            scanResult.advertisementData.connectable)
                        .toList();
    
                    return ListView.builder(
                      shrinkWrap: true,
                      itemCount: scanList.length,
                      itemBuilder: (context, index) {
                        return Card(
    
    　　　　　　　　　　　　　//　既に接続しているものを取得
                          child: StreamBuilder<List<BluetoothDevice>>(
                            stream: flutterBlue.connectedDevices.asStream(),
                            initialData: [],
                            builder: (c, snapshot) {
    
                              // 接続していればtrue
                              var isConnect = false;
    
                              for (final device in snapshot.data) {
                                if (device.id.toString() ==
                                    scanList[index].device.id.toString()) {
                                  isConnect = true;
    
    　　　　　　　　　　　　　　　　　　// ここでservicesのlengthが0になる…
                                  device.services.listen(
                                    (services) {
                                      services.forEach(
                                        (service) {
                                          service.characteristics.forEach(
                                            (characteristics) {
                                              characteristics.setNotifyValue(true);
                                              characteristics.value.listen(
                                                (val) {
                                                  print(val);
                                                },
                                              );
                                            },
                                          );
                                        },
                                      );
                                    },
                                  );
                                }
                              }
    
                              return ListTile(
                                // 接続中かどうか
                                leading: isConnect
                                    ? Icon(
                                        Icons.bluetooth_connected,
                                        color: Colors.blue,
                                      )
                                    : const SizedBox.shrink(),
                                onTap: () async {
                                  if (!isConnect) {
                                    await showBluetoothConnect(
                                        scanList[index].device, showVM);
                                  } else {
                                    await Fluttertoast.showToast(msg: '既に接続されています');
                                  }
                                },
                              );
                            },
                          ),
                        );
                      },
                    );
                  },
                ),
              ],
            ),
        );
      }
    
    // スキャン停止
    Future<void> stopScanning() async {
      await flutterBlue.stopScan();
    }
    
    //　スキャンスタート
    Future<void> startScanning() async {
      await flutterBlue.startScan(timeout: const Duration(seconds: 4));
    }
    
    // 接続
    Future<void> showBluetoothConnect(BluetoothDevice device) async {
      try {
        final state = await device.state.first;
        if (state == BluetoothDeviceState.connected) {
          await Fluttertoast.showToast(msg: '既に接続済みです');
          return;
        }
        await device.disconnect();
        bool isConnect;
        await device.connect().timeout(const Duration(seconds: 5),
            onTimeout: () async {
          debugPrint('timeout occured');
          isConnect = false;
          await Fluttertoast.showToast(msg: 'Bluetoothデバイスに接続できませんでした');
          await device.disconnect();
        }).then((data) {
          if (isConnect == null) {
            Fluttertoast.showToast(msg: 'Bluetoothデバイスに接続できました！');
          }
        });
      } on Exception catch (e) {
        await Fluttertoast.showToast(msg: 'Bluetoothデバイスに接続できませんでした');
        print('Bluetooth connect error:$e');
      }
    }
    
[/code]




flutter_blueを使用しなくても、ボリュームボタンが操作されていること、またキーボードとして認識されることを利用して、下記のような二つのパターンのいずれかで読み取ることができました！！

・RawKeyboardListenerを使用する  
参考：<https://stackoverflow.com/questions/54200938/external-keyboard-in-flutter-
support>  
<https://api.flutter.dev/flutter/widgets/RawKeyboardListener-class.html>

・hardware_buttonsを使用する  
参考：<https://pub.dev/packages/hardware_buttons>

しかし、ボタンを押すとボリュームの操作も行われてしまうため、そちらは検証しないといけません。。  
現状、検索してもボリューム操作を横取りできる方法はわかっていません。

