作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用包 flutter_bloc
用于状态管理。我想创建一个搜索屏幕,并找到了 showSearch
Flutter 函数,一直有问题提供了 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
中再次明确地重新提供它.
showSearch
函数内部推新
Navigator
Route
,是这个问题吗?
最佳答案
是的,当路由改变时,buildContext
也会发生变化。因此,您必须将该块提供给新的上下文。只需使用 BlocProvider
将页面包装到您想要导航的位置:
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) =>
BlocProvider(create: Mybloc(),child:MyPage());
关于flutter - 如何向 `showSearch` 提供 BLoC(带有 flutter_bloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61973440/
我是一名优秀的程序员,十分优秀!