Подождите все байты, прежде чем продолжить (Flutter)

#android #flutter #dart #bluetooth #dart-pub

#Android #флаттер #dart #bluetooth #dart-pub

Вопрос:

В моем коде я использую библиотеку flutter_bluetooth_serial для связи с микроконтроллером.

Как я могу дождаться поступления всех байтов, прежде чем перейти к следующему шагу моей функции?

   static download_file() {
   send_data(Costanti.cmd_download_1, 1028); // here I send the command via bluetooth
                                             // 1028 are the number of bytes I expect as answer
    //--- WAIT THE ARRIVE OF ALL BYTES BEFORE PROCCED---------//
    // manipulation of 1028 bytes
       });
  

Функция с помощью I отправляет данные

   static void send_data(List<int> charCodes, int byte_to_read){
    Uint8List bytes = Uint8List.fromList(charCodes);
    Costanti.dati_arrivati = new List<int>(); //------>> array where I accumulate incoming bytes
    Costanti.connection.output.add(bytes); // Sending data
       }
  

Функция, в которой я считываю входящие байты

   static  stream_read(){
          Costanti.connection.input.listen((datiLetti) {

     // print("${datiLetti.length}");

      for(int i=0; i< datiLetti.length; i  ){
        Costanti.dati_arrivati.add(datiLetti[i])
      }

    }).onDone((){
      toast_message("Device no longer connected");
    });
  }
  

Комментарии:

1. //------>> array where I accumulate incoming bytes ? Не понимаю. Я бы подумал о arraay, в котором вы бы подготовили несколько байтов перед их отправкой.

2. Мы не видим, чтобы вы вызывали stream_read().

3. int byte_to_read Вы не используете этот параметр. Далее я не понимаю, будут ли какие-либо байты для чтения для функции отправки.

4. Costanti.connection.input.listen в strem_read () всегда прослушивается. Как только прибудет байт, он будет доступен с переменной «datiLetti».