Проблема с этим:
ExampleView X = ExampleView(bloc,...)
Вы создаете экземпляр BLoC каждый раз, когда вам нужно, вы теряете все данные из старых сессий, также это будет дополнительной платой за процессор.
Этот подход действителен, только если ваш блок связан только с одной конкретной страницей, но обычно вам требуется статический BLoC. Вот почему мы используем InheritedWidget, потому что Flutter сохраняет все InheritedWidget в памяти. При таком подходе вы создаете экземпляр один раз и используете его везде, не теряя ни одного сеанса, что также эффективно с точки зрения производительности. Конечно, вы можете использовать синглтон, но при этом вы не станете другом:)
Слишком много подходов, но команда Flutter только что объявила, что предлагает этот пакет: https://pub.dev/packages/provider
С помощью этого пакета вы можете добавить несколько блоков, например, если вы не хотите каскадного огромного дерева:
MultiProvider(
providers: [
Provider<Foo>.value(value: foo),
Provider<Bar>.value(value: bar),
Provider<Baz>.value(value: baz),
],
child: someWidget,
)
В конце постарайтесь осмыслить каждый подход, особенно советую вам разобраться в этой статье:
https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/
Вы поймете, когда использовать блок с провайдером или как единое целое или как экземпляр, как в вашем примере и т. Д.