Dart 集团之间共享数据的干净方式

Dart 集团之间共享数据的干净方式,dart,flutter,Dart,Flutter,想象一下以下伪集团: class BlocA { BlocA() { //some initialization } Stream a; Stream b; Stream c; } class BlocB { BlocB() { //some initialization } Stream d; //dependant on a piece of data that resides in BlocA } 将信息从一个bloc传

想象一下以下伪集团:

class BlocA {
  BlocA() {
     //some initialization
   }
   Stream a;
   Stream b;
   Stream c;
   }


class BlocB {
  BlocB() {
    //some initialization
  }
  Stream d; //dependant on a piece of data that resides in BlocA
}

将信息从一个bloc传递到另一个bloc的最干净的方式是什么?如何处理此依赖关系?

您可以将BlocA作为参数注入BlocB

class BlocA {
  Stream a;
}

class BlocB {
  final BlocA _a;

  BlocB(this._a);
}
或者,您可以只传递所需的流,而不是整个块。但只有在流的数量非常有限的情况下才能这样做

然后,您可以自由地从A映射/管道流,以将不同的流暴露到B中

class BlocB {
  Stream b;

  BlocB(BlocA blocA) {
    b = blocA.a.map((a) => 42).asBroadcastStream();
  }
}

我同意@Remi。。在案例2中,最好将流发送到构造函数,如
BlocB(this.b)
@Remi is如果您尝试了作用域bloc,我尝试过全局bloc(包装整个应用程序的)。但是,当我在导航后尝试获取对作用域bloc的引用时,它只会给我null,因为提供该bloc的继承小部件对于我导航到的新路由不再是可访问的。问题是,您的全局bloc依赖于作用域bloc,而它本不应该依赖。要么您的全局集团也应该是范围化的,要么您的范围化集团应该是全局的。您可能希望移动一些流,以便创建一个包含这两个bloc共享的数据的全局bloc。使两个作用域的bloc都依赖于全局bloc,就像路由之间的任何共享数据一样,您需要它是全局的。