如何在同一个命名路由器小部件中使用多个块

How to use multiple blocs in the same named router widget

我想为每个路由器小部件重复使用一个 bloc,但是每个小部件已经有一个 bloc,如何向其中插入另一个 bloc?

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

class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  final _sharedBloc = SharedBloc();
  final _oneBloc = OneBloc();
  final _twoBloc = TwoBloc();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      routes: {
        '/one': (context) => BlocProvider.value(
              value: _oneBloc,  // add _sharedBloc to OnePage widget.
              child: OnePage(),
            ),
        '/two': (context) => BlocProvider.value(
              value: _twoBloc,  // add _sharedBloc to TwoPage widget.
              child: TwoPage(),
            ),
      },
    );
  }

  @override
  void dispose() {
    _counterBloc.close();
    super.dispose();
  }
}

您可以使用 MultiBlocProvider 一次向 child 提供多个 BLoC,如 the flutter_bloc documentation 所述,如下所示:

routes: {
  '/one': (context) => MultiBlocProvider(
        providers: [
          BlocProvider.value(
            value: _sharedBloc,
          ),
          BlocProvider.value(
            value: _oneBloc,
          ),
        ],
        child: OnePage(),
      ),
  // '/two' is similar
},