当Cubit的状态发生改变时,BlocListener才会被执行。因此,如果需要在调用Cubit函数后立即执行BlocListener,可以手动调用Cubit的emit函数来触发其状态的变化。以下是一个示例:
class CounterCubit extends Cubit {
CounterCubit() : super(0);
void increment() {
emit(state + 1);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Bloc Listener Example')),
body: BlocListener(
listener: (context, state) {
print('The new state is $state');
},
child: Center(
child: RaisedButton(
child: Text('Increment'),
onPressed: () {
context.bloc().increment(); // 触发状态更新
},
),
),
),
),
);
}
}
在这个示例中,当用户点击按钮时,CounterCubit
的increment
函数被调用,并调用了emit
函数来更新其状态。由于状态发生了改变,BlocListener
的listener
函数将被执行,并打印出新状态的值。