Как передать полученный текст в текстовое поле Flutter - PullRequest
0 голосов
/ 18 июня 2020

Я использую плагин преобразования речи в текст (Speech_recognition) и извлекаю текст из голоса, но как я могу вставить текст в поле поиска (TextField) после извлечения текста. Итак, я хочу получить данные с голоса и выполнить поиск. вот мой код:

// Здесь извлеченный текст внутри контейнера

  Container(
            child: Center(
              child: Text(
                (transcription.isEmpty)
                    ? "Speak to Record"
                    : "Your text is \n\n$transcription",
                textAlign: TextAlign.center,
                style: TextStyle(color: Colors.pink, fontSize: 20),
              ),
            ),
          ),

// Вот мой SearchField (TextField)

   Padding(
            padding: const EdgeInsets.all(20),
            child: TextField(
              onChanged: (text) {

                _con.refreshSearch(text);
              },
              onSubmitted: (text) {
                _con.saveSearch(text);
              },
              controller: _searchController,
              autofocus: true,
              decoration: InputDecoration(
                contentPadding: EdgeInsets.all(12),
                hintText: S.of(context).search_for_product,
                hintStyle: Theme.of(context)
                    .textTheme
                    .caption
                    .merge(TextStyle(fontSize: 14)),
                prefixIcon:
                    Icon(Icons.search, color: Theme.of(context).accentColor),
                border: OutlineInputBorder(
                    borderSide: BorderSide(
                        color: Theme.of(context).focusColor.withOpacity(0.1))),
                focusedBorder: OutlineInputBorder(
                    borderSide: BorderSide(
                        color: Theme.of(context).focusColor.withOpacity(0.3))),
                enabledBorder: OutlineInputBorder(
                    borderSide: BorderSide(
                        color: Theme.of(context).focusColor.withOpacity(0.1))),
                suffixIcon: Row(
                  mainAxisSize: MainAxisSize.min,
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    InkWell(
                      onTap: scanBarcode,
                      child: Image.asset(
                        "assets/img/barcode.png",
                        height: 20,
                        color: Colors.deepOrangeAccent,
                      ),
                    ),
                    _buildVoiceInput(
                      onPressed: _speechRecognitionAvailable && !_isListening
                          ? () => start()
                          : () => stop(),
                      label: _isListening ? S.of(context).listening : '',
                    ),

                  ],
                ),
              ),
            ),
          ),

1 Ответ

1 голос
/ 18 июня 2020

Принимая во внимание значение transcription, которое отвечает за текст, вы можете использовать его и изменить данные с помощью Search TextEditingController.

Итак, вот о чем я. Я не уверен, где вы на самом деле получаете данные, но вы можете изменить значения, как только вы получите данные из голоса, как это, и назначьте их контроллеру для заполнения Search Field

// Suppose you are fetching the data from this method, 
void fetchTextFromVoice(){
   setState(() {
     // Here you might be assigning the value to the Transcript value
     this.transcription = data_from_voice;
     // also this does the magic, which will put the data inside the Search Field
     // Your TextEditingController is the key to do that
     _searchController.text = data_from_voice; 
     // or _searchController.text = transcription; Since transcript has some value
  });
}

Также прочтите о TextEditingController Class о том, какие операции вы можете выполнять с его помощью. Дополнительные знания об этом классе в значительной степени помогут вам :)

Надеюсь, это поможет, если нет, то покажите мне, где находится функция, для которой вы устанавливаете значение transcription. Вы можете присвоить значение тому же месту, как указано выше, для _searchController.text, и вы можете go. Сообщите мне :)

...