Flutter - Как спроектировать несколько вложенных BLoC? - PullRequest
0 голосов
/ 18 ноября 2018

Предположим, что существует BLoC верхнего уровня с именем PreferenceBloc, а внутри этого BLoC находится другой BLoC с именем PageBloc.Если для логики внутри PageBloc требуется поток значений из PreferenceBloc (т. Е. Для создания новой страницы необходимо знать конфигурацию страницы), как мне это спроектировать?

Пример кода:

class PreferencesBloc{
  final preferencesService=PreferencesService();

  // Output interfaces of Bloc
  ValueObservable<String> get mainDir => _mainDir.distinct().shareValue(seedValue: '/');
  final _mainDir = BehaviorSubject<String>(seedValue: '/');

  // Input interfaces of Bloc...
  // .........
}
class PageBloc{
  final List<PageInfo> _pageInfos=<PageInfo>[];
  // Output interfaces of Bloc...
  // .........

  // Input interfaces of Bloc...
  Sink<int> get pageCreation => _pageCreationController.sink;
  final _pageCreationController = StreamController<int>();

  pageBloc(){
    _pageCreationController.stream.listen(_handleCreation);
  }
  void _handleCreation(int pos){
    _pageInfo.insert(pos, PageInfo('I need the mainDir here!')); //Need info from PreferencesBloc!!!
  }
}

class PreferencesProvider extends InheritedWidget{
  final PreferencesBloc preferencesBloc;
  //...
}
class PageProvider extends InheritedWidget{
  final PageBloc pageBloc;
  //...
}



void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return PreferencesProvider(
      child: PageProvider(
        child: MaterialApp(
          home: Scaffold(
            body: Text("test"),
          ),
        ),
      ),
    );
  }
}

Редактировать: Подводя итог, удобно общаться между Блоком и виджетом в флаттере, но есть ли хороший способ связи между Блоком и Блоком?

1 Ответ

0 голосов
/ 05 марта 2019

Этот вопрос был задан 18 ноября. В настоящее время уже существует отличная библиотека блоков, которая поддерживает вложенные блоки. Вы можете использовать https://pub.dartlang.org/packages/flutter_bloc в официальном пабе дартс. До сих пор я использовал его для разработки довольно сложного приложения, и это здорово.

...