9

という関数に渡すことができるように、TextField タイトル内のユーザー入力を取得しようとしています void _filterList(value)。ただし、テキストを入力するたびに、次のエラーが表示されます。

W/IInputConnectionWrapper( 7715): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper( 7715): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper( 7715): getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper( 7715): beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper( 7715): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper( 7715): endBatchEdit on inactive InputConnection

これは私のコードです:

List filteredlist = [];
List entries = [];
bool isSearching = false;

getCountries() async {
  var response =
    await Dio().get('https://restcountries.eu/rest/v2/regionalbloc/eu');
return response.data;
}

@override
void initState() {
getCountries().then((data) {
  setState(() {
    entries = filteredlist = data;
  });
});
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      backgroundColor: Colors.blue,
      title: !isSearching
          ? Text('All EU Countries')
          : TextField(
              onChanged: (value) {
                _filterList(value);
              },
              style: TextStyle(color: Colors.white),
              decoration: InputDecoration(
                icon: Icon(Icons.search, color: Colors.white),
                hintText: "Search Here",
                hintStyle: TextStyle(color: Colors.white),
              )),
      actions: <Widget>[
        isSearching
            ? IconButton(
                icon: Icon(Icons.cancel),
                onPressed: () {
                  setState(() {
                    this.isSearching = false;
                    filteredlist = entries;
                  });
                },
              )
            : IconButton(
                icon: Icon(Icons.search),
                onPressed: () {
                  setState(() {
                    this.isSearching = true;
                  });
                })
      ],
    ),
    body: _buildList());
}

これは私の機能です:

void _filterList(value) {
setState(() {
  filteredlist = entries.where(
      (entry) => entry['name'].toLoweCase().contains(value.toLowerCase()));
});

}

私が復元した限り、キーボードに問題があるようですが、それを防ぐ方法はわかりません

4

5 に答える 5

5

テキストフィールドのコントローラーがビルドメソッドの外にあることを確認し、ウィジェットがステートフルであることを確認してください

于 2021-02-28T00:03:43.193 に答える
1

既知の問題は、こちらで追跡されています。このサンプル コードでもandroid で警告が表示されます。何が原因かについてのコンセンサスはありません。

少し掘り下げてみました。エンジンの TextInputPlugin で InputConnection を正しく保持していないため、Android がこれらの警告を生成しているようです。しかし、私たちが間違っていることを本当に理解していません。

ソース

于 2020-08-15T09:24:08.213 に答える