web-dev-qa-db-ja.com

flutter:非アクティブInputConnectionのGetTextBeforeCursor

テキストフィールドのタイトル内でユーザー入力を取得しようとしているので、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()));
});
 _

}

私が絶え間なくても敗北した限り、キーボードに問題があるようですが、私はそれを防ぐ方法を考え出していません

7
loma

私も私のプロジェクトでもこれを遭遇しました。私の原因は、足場ウィジェットを返すクラスのビルドメソッド内にMediaQuery.of(context).heightを呼び出すコードを持っていました。私はそれを取り除く必要があり、子供ウィジェットクラスに置かなければなりませんでした。例えば:

私が持っていた前に...

```Class MyHomePage extends StatelessWidget {
     //some code
     Widget build (BuildContext context) {
       double availableHeight = MediaQuery.of(context).height - statusBarHeight - appBarHeight;
       return Scaffold (//some code that passes availableHeight to a widget's [MyHomePageBody] constructor);
     }
}```

今私が持っています...

```Class MyHomePage extends StatelessWidget {
     //some code
     Widget build (BuildContext context) {
       
       return Scaffold (//some code);
     }
}

Class MyHomePageBody extends StatelessWidget {
     //some code
     Widget build (BuildContext context) {
       double availableHeight = MediaQuery.of(context).height - statusBarHeight - appBarHeight;
       return Container (//some code that uses availableHeight);
     }
}```

機能する可能性がある他の修正は、Flutter Channelが安定したチャンネル上にあることを確認することです。そうでない場合は、次のコマンドflutter channel stableを介してチャンネルを変更できます。

ソース: https://github.com/flutter/flutter/issues/11321#

0
Tobiloba

TexteditingControllerとFutureBuilderを使用してそれを実行できます。このような:

var searchController = TextEditingController();
var searchTerm = "";

  @override
  void initState() {
    super.initState();
    searchController.addListener(onSearch);
  }

 onSearch() {
    setState(() {
      searchTerm = searchController.text;
      updateList();
    });
  }

  Future updateList() async {
    return await getYourFilteredList(searchTerm);
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(     
      body: Center(
        child: Column(
          children: <Widget>[
           TextField(controller: searchController),
            FutureBuilder(
      future: updateList(),
      builder: (context, snapshot) {
        if (snapshot.hasData)
          return Expanded(
            child: _buildList(snapshot.data),
          );
        return CircularProgressIndicator();
      },
    );
          ],
        ),
      ),
    );
  }
 _

注:このコードをテストしませんでしたが、私は似たようなものを書きました。

0
Pedro R.