【问题标题】:How to use the same BLoC for different widgets in Flutter?如何在 Flutter 中为不同的小部件使用相同的 BLoC?
【发布时间】:2020-12-29 18:22:41
【问题描述】:

我有 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 并传递所需的数据。

标签: flutter dart bloc


【解决方案1】:

使用这个块实现https://bloclibrary.dev/ 您的集团目前将拥有单一实例,并且处于单一状态。根据之前的状态调用新状态,您将永远不会遇到不需要的查询或类似问题。

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2021-06-17
    • 2019-08-09
    • 2020-10-01
    • 2021-09-24
    • 1970-01-01
    • 2023-03-04
    • 2022-11-16
    • 2023-01-04
    相关资源
    最近更新 更多