【问题标题】:Flutter BLoC Provider QueryFlutter BLoC 提供者查询
【发布时间】:2020-04-29 02:48:42
【问题描述】:

我最近开始在 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(
          ...
        )
      )
    )
  )
)

有没有更有效的方法来管理这个?

【问题讨论】:

    标签: flutter dart bloc


    【解决方案1】:

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

    所以它看起来像这样:

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

    【讨论】:

    猜你喜欢
    • 2020-06-15
    • 2019-06-16
    • 2019-10-25
    • 2023-01-26
    • 2022-12-31
    • 2022-01-12
    • 2021-09-23
    • 2020-03-22
    • 1970-01-01
    相关资源
    最近更新 更多