Flutter BLoC提供者查询

时间:2020-01-11 21:36:37

标签: flutter dart bloc

我最近开始在Flutter中使用BLoC模式,并且正在努力了解BLoC提供程序的问题。我的课看起来像这样

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;
  }
}

现在我读过的大多数文章都说将Provider添加到Material应用程序上方的小部件树中

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

我的问题是,如果您有一个具有大量屏幕的复杂应用程序,将会发生什么。看来这会很快变得混乱

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

是否有更有效的方法来管理此问题?

1 个答案:

答案 0 :(得分:1)

This page解释了如何解决在应用程序开始时提供所有集团的可读性问题。有一个名为MultiBlocProvider的小部件,它带有Provider小部件列表。

所以它看起来像这样:

return MultiBlocProvider(
  providers: [
    BlocProvider<LoginBloc>(
      create: (BuildContext context) => LoginBloc(),
    ),
    BlocProvider<AccountBloc>(
      create: (BuildContext context) => AccountBloc(),
    ),
    BlocProvider<PageOneBloc>(
      create: (BuildContext context) => PageOneBloc(),
    ),
  ],
  child: MaterialApp(...)
)