Flutter bloc - 在状态变化时显示快餐栏
Flutter bloc - Show snackbar on state change
我正在尝试使用 Google 登录。当 googleSignInAccount 时,我使用 PlatformExecption 产生新状态。现在,我如何访问该值以进行一些更改。
try{
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
if(googleSignInAccount == null){
yield GoogleLoginErrorState(error: PlatformException(code: 'user-cancel'));
}
}
我的state.dart
class GoogleLoginErrorState extends GoogleLoginState {
final PlatformException error;
GoogleLoginErrorState({this.error});
@override
List<Object> get props => [error];
}
我的 BlocBuilder
if (state == GoogleLoginErrorState()) {
}
在区块生成器中,
if (state is GoogleLoginErrorState) {
}
这将检查 state
数据类型是否为 GoogleLoginErrorState
并使用 state
Text(state.error.code)
对于显示快餐栏/对话框或导航到另一个屏幕等副作用,您必须使用 BlocListener
,如下所示:
BlocListener<YourGoogleSigninBloc, YourGoogleSigninState>(
listener: (context, state) {
if(state is GoogleLoginErrorState){
// show snackbar here
}
},
child: YourWidget(),
)
您也可以使用 BlocConsumer
而不是像这样嵌套 BlocListener
和 BlocBuilder
:
BlocConsumer<YourGoogleSigninBloc, YourGoogleSigninState>(
listener: (context, state) {
if(state is GoogleLoginErrorState){
// show snackbar here
}
},
builder: (context, state) {
return YourWidget();
},
)
我正在尝试使用 Google 登录。当 googleSignInAccount 时,我使用 PlatformExecption 产生新状态。现在,我如何访问该值以进行一些更改。
try{
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
if(googleSignInAccount == null){
yield GoogleLoginErrorState(error: PlatformException(code: 'user-cancel'));
}
}
我的state.dart
class GoogleLoginErrorState extends GoogleLoginState {
final PlatformException error;
GoogleLoginErrorState({this.error});
@override
List<Object> get props => [error];
}
我的 BlocBuilder
if (state == GoogleLoginErrorState()) {
}
在区块生成器中,
if (state is GoogleLoginErrorState) {
}
这将检查 state
数据类型是否为 GoogleLoginErrorState
并使用 state
Text(state.error.code)
对于显示快餐栏/对话框或导航到另一个屏幕等副作用,您必须使用 BlocListener
,如下所示:
BlocListener<YourGoogleSigninBloc, YourGoogleSigninState>(
listener: (context, state) {
if(state is GoogleLoginErrorState){
// show snackbar here
}
},
child: YourWidget(),
)
您也可以使用 BlocConsumer
而不是像这样嵌套 BlocListener
和 BlocBuilder
:
BlocConsumer<YourGoogleSigninBloc, YourGoogleSigninState>(
listener: (context, state) {
if(state is GoogleLoginErrorState){
// show snackbar here
}
},
builder: (context, state) {
return YourWidget();
},
)