我正在使用该软件包flutter_bloc
进行状态管理。我想创建一个搜索屏幕,并找到了Flutter 功能,并且在为我的实现创建的实例提供实例时showSearch
遇到了问题。我终于让它工作了,但想问一下最好的方法是什么。这是代码(摘录,从放置在 a 中的按钮开始):BLoC
ListView
SearchDelegate
AppBar
Scaffold
class ItemSearchButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return IconButton(
icon: Icon(Icons.search),
onPressed: () {
final itemListBloc = context.bloc<ItemListBloc>();
showSearch(
context: context,
delegate: _ItemSearchDelegate(itemListBloc),
);
},
);
}
}
class _ItemSearchDelegate extends SearchDelegate<String> {
final ItemListBloc itemListBloc;
_ItemSearchDelegate(this.itemListBloc);
// other overridden methods
@override
Widget buildSuggestions(BuildContext context) {
return BlocProvider.value(
value: itemListBloc,
child: ItemListWidget(),
);
}
}
基本上,调用该showSearch
方法的上下文具有正确的 BLoC 实例,但它在我的实现中不可用SearchDelegate
,除非我在buildSuggestions
.
为什么 BLoC 默认不可用?该showSearch
函数在内部推送一个新的Navigator
Route
,这是问题吗?
处理此类事情的规范方法是什么?