如何将 dispose 与颤振块一起使用?

Posted

技术标签:

【中文标题】如何将 dispose 与颤振块一起使用?【英文标题】:How to use dispose with flutter bloc? 【发布时间】:2021-10-11 18:00:48 【问题描述】:

我有这个有状态的小部件,它使用一个名为 RecorderBloc 的块:

class _RecorderScreenWidgetState extends State<RecorderScreenWidget> 
  late final RecorderBloc _recorderBloc;

  @override
  void initState() 
    super.initState();
    _recorderBloc = serviceLocator.get<RecorderBloc>();
  

  @override
  void dispose() 
    _recorderBloc.add(RecorderEvent.dispose());
    super.dispose();
  

  @override
  Widget build(BuildContext context) 
                 //.....ommitted code
   

如您所见,我需要在完成后处理集团的一些成员,这是通过添加一个 dispose 事件来完成的。

但我不知道将 bloc 定义为有状态小部件的成员变量是否正确?

如果没有,那么如何在StatefulWidgetdispose() 方法中获取bloc 的实例以添加dispose 事件?

【问题讨论】:

【参考方案1】:

据我所知,没有必要定义 dispose 事件。 Bloc 类有一个 close 函数,当底层小部件 (InheritedProvider) 被释放时将调用该函数。您可以在 BLoC 中覆盖该函数并执行所需的任何操作。

class MyBloc extends Bloc<MyBlocState> 
  @override
  Future<void> close() 
    // dispose
    return super.close();
  

【讨论】:

以上是关于如何将 dispose 与颤振块一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 bloc 模式与颤振应用程序集成?

尝试将 ExpansionPanelList/ExpansionPanel 与(Firebase)流一起使用时出现颤振错误

在 dispose() 之后调用 setState()

如何正确测试颤振块

颤振如何与单页网页和不同的路由网址一起工作?

将flutter_bloc与tabview一起使用