AppBar有一个搜索图标,单击时会在'title'属性中显示一个TextField。单击搜索图标时,我需要TextField自动对焦。问题是“自动对焦”属性(如果设置为true),而不是仅更改title属性的状态,而是某种原因导致小部件变成“脏”状态。这将导致调用主构建函数,从而重新构建整个对象。
试图复制它并提供一个示例应用程序,但奇怪的是,它似乎在演示中正常运行。
有任何调试建议吗?
AppBar(
centerTitle: true,
title: StreamBuilder(
stream: false,
initialData: symbolBloc.isSearching,
builder: (BuildContext context, AsyncSnapshot<bool> snapshot){
if(snapshot.data) {
return TextField(
// autofocus: true, <--- here
controller: searchQuery,
style: new TextStyle(
color: Colors.white,
),
);
}
return new Text("", style: new TextStyle(color: Colors.white)
);
}),
backgroundColor: Colors.blueGrey,
elevation: 0.0,
actions: <Widget>[
StreamBuilder(
stream: bloc.isSearchActive,
initialData: false,
builder: (BuildContext context, AsyncSnapshot<bool> snapshot){
if(snapshot.data)
return activeSearchIconButton(symbolBloc);
return searchIconButton(symbolBloc);
},
),
],
),
searchIconButton(SymbolBloc bloc){
return new IconButton(
icon: new Icon(
Icons.search,
color: Colors.white,
),
tooltip: 'Search',
onPressed: (){
bloc.displaySearchField(true);
},
);
}
activeSearchIconButton(SymbolBloc bloc){
return new IconButton(
icon: new Icon(
Icons.close,
color: Colors.white,
),
tooltip: 'Search',
onPressed: (){
bloc.displaySearchField(false);
},
);
}
答案 0 :(得分:0)
您可以设置FocusNode
的{{1}}属性,然后在TextField
上单击通话Button
答案 1 :(得分:0)
问题与InheritedWidgets有关。原因是有多个InheritedWidget。我有一个父窗口小部件,包裹了runApp()函数(持有对api对象的引用),以及一个孩子小部件,包裹了每条路线(持有对每个特定屏幕的bloc类的引用)。
一旦我将子小部件的内容移到父级并完全删除了子级InheritedWidget,问题就消失了。