使用Flutter形式的Cubit

时间:2020-10-16 08:21:21

标签: flutter flutter-bloc

我正在尝试将Cubit状态管理用于表单(验证和提交)。有什么我可以效仿的例子吗?

我已经尝试实现它并且它可以工作,但是每次出现错误时,它会再次向我显示带有空字段的表单,因为该小部件已用初始数据重新绘制。我该怎么解决?

在以下表单上找到我的Cubit消费者代码:

BlocConsumer<LoginCubit, LoginState> buildLoginCard(BuildContext context) {
  return BlocConsumer<LoginCubit, LoginState>(
    listener: (context, state) {
      if (state is LoginError) {
        Scaffold.of(context).showSnackBar(
          SnackBar(
            content: Text(state.message),
            backgroundColor: Colors.red,
          ),
        );
      } else if (state is LoginSuccess) {
        BlocProvider.of<AuthCubit>(context).autoLogin();
      }
    },
    builder: (context, state) {
      if (state is LoginInProgress) {
        return LoadingWidget();
      } else {
        return LoginCardWidget();
      }
    },
  );
}

1 个答案:

答案 0 :(得分:0)

您可以尝试在BlocConsumer之后将其添加到您的listener

buildWhen: (previous, current) {
    if (current is LoginError)
      return false;
    else
      return true;
  },

在这种情况下,如果状态为错误,它将不会重建窗口小部件起点,并且字段将具有自己的值而不会被更改