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

标签 flutter dart bloc

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

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/
您的集团目前将具有单一实例,并且具有单一状态。根据以前的状态调用新状态,您将永远不会遇到不必要的查询或类似问题。

关于flutter - 如何在Flutter中将相同的BLoC用于不同的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63843481/

相关文章:

flutter - Provider中的监听器如何在Flutter中工作?

android - Flutter,根据屏幕分辨率/dpi 优化 Material 尺寸的最佳方法?

dart - flutter :未处理的异常:错误状态:调用关闭后无法添加新事件

flutter - 我怎样才能在 flutter 中实现这种类型的自定义选项卡设计?

linux - Flutter 找不到所需的包 flutter_secure_storage/linux/CMakeLists.txt :14

dart - 改变 AppBar 的高度

flutter - 提供商 : How can I `notifyListener()` within a `StreamBuilder()` ? 它导致错误 `setState() or markNeedsBuild() called during build`

flutter - flutter_bloc 库中的存储库提供程序在推送新路由时不提供存储库

flutter - 使用 go_router 和 bloc 在 context.pop() 之后刷新 View

flutter - 如果用户尝试单击禁用的单选按钮,则显示提示文本