如果我使用无状态小组件,应该关闭Streams吗?

时间:2019-09-26 13:10:05

标签: flutter dart

我做了使用Streams的小型无状态小部件。我已经阅读到我始终应关闭Streams以防止内存泄漏。但是无状态窗口小部件没有dispose()方法。

那我该怎么办?不在无状态中使用流吗?还是可以吗?

这是我的代码:

class HomePage extends StatelessWidget {
  Bloc _bloc = Bloc();

  @override
  Widget build(BuildContext context)
  {
    return Scaffold(
      appBar: AppBar(),
      body: Container(
        child: 
        StreamBuilder(
          stream: _bloc.counter,
          initialData: 0,
          builder: (BuildContext context, AsyncSnapshot<int> _snapshot)
          {
            return Column(
              children: <Widget>[
                Text("Pressed: ${_snapshot.data}"),
                RaisedButton(child: Text("inc"), onPressed: () => { _bloc.eventSink.add(IncrementEvent()) },),
                RaisedButton(child: Text("dec"), onPressed: () => { _bloc.eventSink.add(DecrementEvent()) },)
              ],
            );
          }

        )

      ),
    );

  }

}

我的代码基于here中的示例。

如果出现内存泄漏,请说明情况如何?每次点击都会创建新对象?还是什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不能使用StatelessWidget,否则会出现内存泄漏并可能会丢失状态。

将小部件转换为StatefulWidget,并正确放置对象。