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 而不是像这样嵌套 BlocListenerBlocBuilder

BlocConsumer<YourGoogleSigninBloc, YourGoogleSigninState>(
  listener: (context, state) {
    if(state is GoogleLoginErrorState){
        // show snackbar here
    }
  },
  builder: (context, state) {
    return YourWidget();
  },
)