如何在Flutter中将相同的BLoC用于不同的小部件?

问题描述

我有2个自定义小部件,我想使用相同的Bloc文件。 我的Bloc文件从构造函数中的互联网获取数据。

class MyBloc {
// StreamControllers,StreamSinks,Streams ...

  MyBloc() {
    getDataFromInternet();
  }
}
class MyWidget1 extends StatefulWidget {
  MyWidget1({Key key}) : super(key: key);

  @override
  _MyWidget1State createState() => _MyWidget1State();
}

class _MyWidget1State extends State<MyWidget1> {
  MyBloc _bloc;

  @override
  void initState() {
    _bloc = MyBloc();
    super.initState();
  }
}
class MyWidget2 extends StatefulWidget {
  MyWidget2({Key key}) : super(key: key);

  @override
  _MyWidget2State createState() => _MyWidget2State();
}

class _MyWidget2State extends State<MyWidget2> {
  MyBloc _bloc;

  @override
  void initState() {
    _bloc = MyBloc();
    super.initState();
  }
}

我的问题是,每次屏幕更改时,它都会下载数据(两个小部件中的任何一个都出现在屏幕上)。 是否应该将初始化的bloc对象传递给构造函数中的小部件,而不是在小部件构造函数中创建新的Bloc?我不想保存数据并编写逻辑来检查是否已经下载了它。

解决方法

使用此bloc实现https://bloclibrary.dev/ 您的集团目前将具有单一实例,并且具有单一状态。根据以前的状态调用新状态,您将永远不会遇到不必要的查询或类似问题。