gpt4 book ai didi

flutter - 如何向 `showSearch` 提供 BLoC(带有 flutter_bloc)

转载 作者:行者123 更新时间:2023-12-04 09:53:42 24 4
gpt4 key购买 nike

我正在使用包 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 中再次明确地重新提供它.

为什么默认情况下 BLoC 不可用? 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com