【问题标题】:How to pass data down the tree using flutter_blocs?如何使用flutter_blocks将数据向下传递?
【发布时间】:2021-04-26 00:01:47
【问题描述】:

在过去的几天里,我一直很纠结这件事。

所以我的用例是, A -> B -> C -> D

当 D 发生一些变化时,更新 A 中的一些数据。 A、B、C、D 是不同的屏幕。

现在我知道我们可以使用 MultiBlocProvide 为 D 提供两个提供程序。 但我正在使用推送的名称路由, 不知道如何在这里使用集团进行交流。

routes: {
  Routes.ScreenA: (context) => _getScreenA(),
  Routes.ScreenB: (context) => _getScreenB(),
  Routes.ScreenC: (context) => _getScreenC(),
  Routes.ScreenD: (context) => _getScreenD(),
}

  _getScreenA() {
    return BlocProvider<ScreenABloc>(
        create: (context) =>
            ScreenABloc(),
        child: ScreenARoute());
  }

  _getScreenB() {
    return BlocProvider<ScreenBBloc>(
        create: (context) => ScreenBBloc(),
        child: ScreenBRoute());
  }

  _getScreenC() {
    return BlocProvider<ScreenCBloc>(
        create: (context) => ScreenCBloc(),
        child: ScreenCRoute());
  }

  _getScreenD() {
    return BlocProvider<ScreenDBloc>(
        create: (context) => ScreenDBloc(),
        child: ScreenDRoute());
  }

还检查了 Todo's 的示例,但现在确定如何将其插入此处。

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:

    与其用BlocProvider 包装每条路由,不如用main.dart 文件将MaterialApp 包装在MultiBlocProvider 上,然后在那里初始化所有需要的bloc 类,它们将在您的应用程序中随处可用。如果您打算在不同的路由上定义相同的 bloc - 将会有一些数据不一致,因为您没有使用 bloc 的相同实例。

    【讨论】:

    • 感谢您的回答,我肯定可以这样做,但是您认为将 Blocs 公开给整个小部件树是个好主意吗?我的意思是从设计的角度来看,我们暴露了整个应用程序中的所有数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2018-10-15
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多