Flutter -TextField Controller получает мой курсор перед текстом

Я получаю это предупреждение на своей консоли W/IInputConnectionWrapper(25185): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper(25185): getSelectedText on inactive InputConnection W/IInputConnectionWrapper(25185): getTextAfterCursor on inactive InputConnection

Я использую клавиатуру dateTime, когда я ввожу текст в текстовое поле, курсор перемещается перед текстом. Это раздражает. Я где-то читал, что контроллер TextEditing нужно утилизировать / закрыть. Я не знаю, как и что это значит. Любой знает, как избавиться от этих предупреждений и странного поведения TextInputController.


person GoPro    schedule 24.07.2018    source источник
comment
Извините за повторное открытие этого вопроса, но удалось ли вам решить эту проблему?   -  person Gilvan André    schedule 18.10.2019


Ответы (3)


У меня такая же проблема, Моя задача, я хочу очистить текстовое поле при нажатии кнопки

вот мой код

String searchData = "";
 TextEditingController searchEditor = TextEditingController();

            Row(
                children: <Widget>[
                  Expanded(
                    child: TextField(  // My textbox
                      controller: searchEditor,
                      autofocus: false,
                      onChanged: (str){
                        searchData = (str == null)? "" : str;
                        setState(() {
                        });
                      },
                      decoration: InputDecoration(
                        prefixIcon: IconTheme(
                          child: Icon(Icons.search),
                          data: IconThemeData(color: Colors.blueAccent),
                        ),
                        labelText: 'Search',
                      ),
                    ),
                    flex: 8,
                  ),
                  Expanded(
                    child: RaisedButton(
                      color: Basic.hbColor,
                      textColor: Colors.white,
                      child: Icon(Icons.clear),
                      onPressed: (){      // On button click
                        FocusScope.of(context).unfocus();   // Close keyboard
                        setState(() {
                          searchData = "";
                        });
                        Future.delayed(Duration(microseconds: 500),(){   //call back after 500  microseconds
                          searchEditor.clear();  // clear textfield 
                        });
                      },
                      elevation: 10,
                    ),
                    flex: 2,
                  )
                ],
              )

я решил с помощью ИСПОЛЬЗОВАНИЯ 'searchEditor.clear ();' внутри Future.delayed Потому что, когда мы вызываем FocusScope.of (context) .unfocus (); для закрытия клавиатуры, для закрытия требуется несколько микросекунд, поэтому отображается это WANRING то есть getTextBeforeCursor on inactive InputConnection для преодоления я вызвал searchEditor.clear (); метод через несколько микросекунд

это работает для меня.

person Shamim    schedule 26.11.2019

Вы должны свернуть / закрыть клавиатуру перед нажатием кнопки, в этом случае вы не получите никакого предупреждения.

person E1 CNC    schedule 21.10.2019
comment
Не могли бы вы быть более конкретными и показать нам, как это сделать во Flutter? - person Philippe Fanaro; 16.03.2020

вам нужно сначала создать переменную

<<< var _controller = TextEditingController(); >>>

затем вы создаете свойства текстового поля и передаете его

<<<controller: _controller,>>>

тогда, когда ваши дела будут сделаны, сделайте это

<<<_controller.clear();>>>
person C.ER    schedule 07.05.2020