如何在同一个命名路由器小部件中使用多个块
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
},
我想为每个路由器小部件重复使用一个 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
},