Flutter BLoC 提供商查询
Flutter BLoC Provider Query
我最近开始在 Flutter 中使用 BLoC 模式,并且正在努力理解 BLoC 提供程序的问题。我的 class 看起来像这样
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(
...
)
)
)
)
)
有没有更有效的方法来管理这个?
This page 解释了如何解决在应用程序开始时提供所有 bloc 的可读性问题。有一个名为 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(...)
)
我最近开始在 Flutter 中使用 BLoC 模式,并且正在努力理解 BLoC 提供程序的问题。我的 class 看起来像这样
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(
...
)
)
)
)
)
有没有更有效的方法来管理这个?
This page 解释了如何解决在应用程序开始时提供所有 bloc 的可读性问题。有一个名为 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(...)
)