【发布时间】:2020-12-21 12:46:47
【问题描述】:
我有两个命名的路由器小部件,我应该如何使用 bloc 模式将参数从一个传递到另一个?
// main.dart
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<OneBloc>(create: (BuildContext context) => OneBloc()),
BlocProvider<TwoBloc>(
create: (BuildContext context) => TwoBloc())
],
child: MaterialApp(
title: 'testApp',
initialRoute: '/one',
routes: {
'/one': (context) => One(),
'/two': (context) => Two()
},
),
);
}
}
// one_bloc.dart
class OneBloc extends Bloc<OneEvent, OneState> {
OneBloc() : super(OneInitial());
@override
Stream<OneState> mapEventToState(
OneEvent event,
) async* {
if (event is PassParameter) {
yield NavigateToTwo('parameter from One');
}
}
}
// one_state.dart
@immutable
abstract class OneState extends Equatable {
const OneState();
@override
List<Object> get props => [];
}
class NavigateToTwo extends OneState {
final String parameter;
NavigateToTwo(this.parameter);
}
// One.dart -- part of UI code
@override
Widget build(BuildContext context) {
return BlocConsumer<OneBloc, OneState>(listener: (context, state) {
if (state is NavigateToTwo) {
Navigator.pushNamed(context, '/two'); // how to pass the state.parameter to TwoBloc
}
},
// other code.
更新
查看official web site中的todo示例后,应该使用TwoBloc中的StreamSubscription监听OneBloc NavigateToTwo状态获取参数。
【问题讨论】:
标签: flutter flutter-bloc