Флаттер BLo C Провайдерский запрос - PullRequest
0 голосов
/ 12 января 2020

Я недавно начал играть с паттерном BLo C во Flutter и пытаюсь понять проблему с провайдером BLo C. Мой класс выглядит следующим образом:

class LoginBlocProvider extends InheritedWidget {
  final LoginBloc bloc;

  LoginBlocProvider({Key key, Widget child})
      : bloc = LoginBloc(),
        super(key: key, child: child);

  @override
  bool updateShouldNotify(InheritedWidget oldWidget) => true;

  static LoginBloc of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<LoginBlocProvider>().bloc;
  }
}

Теперь большинство прочитанных мною статей говорят о том, чтобы добавить провайдера в дерево виджетов прямо над приложением Материал

return LoginBlocProvider(
    child: MaterialApp(...)
)

Моя проблема с этим это то, что происходит, если у вас сложное приложение с большим количеством экранов. Кажется, это очень быстро запутается

return LoginBlocProvider(
  child: AccountBlocProvider(
    child: ScreenOne(
      child: ScreenTwo(
        child: ScreenThree(
          ...
        )
      )
    )
  )
)

Есть ли более эффективный способ справиться с этим?

1 Ответ

1 голос
/ 12 января 2020

На этой странице объясняется, как обойти проблему читабельности при предоставлении всех ваших блоков при запуске приложения. Существует виджет MultiBlocProvider, который принимает список виджетов провайдера.

Так это будет выглядеть так:

return MultiBlocProvider(
  providers: [
    BlocProvider<LoginBloc>(
      create: (BuildContext context) => LoginBloc(),
    ),
    BlocProvider<AccountBloc>(
      create: (BuildContext context) => AccountBloc(),
    ),
    BlocProvider<PageOneBloc>(
      create: (BuildContext context) => PageOneBloc(),
    ),
  ],
  child: MaterialApp(...)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...