flutter 使用BlocBuilder时,获取类型“Null”不是类型“String”的子类型错误

nfs0ujit  于 2023-05-01  发布在  Flutter
关注(0)|答案(1)|浏览(136)

场景

我正在尝试在Flutter应用中使用flutter_bloc进行状态管理。在我的应用程序中,我有一个按钮,只有在输入的电子邮件有效时才会出现。为此,我有一个_isEmailValid变量初始设置为 false,一旦输入的电子邮件有效,它就会更新为 true
我想显示的按钮是 Package 在BlocBuilder中,如下所示:

BlocBuilder<ShowButtonBloc, ShowButtonState>(
                    builder: buildSubmitButton,
                  ),

其中buildSubmitButton如下:

Widget buildSubmitButton(BuildContext context, ShowButtonState state) {
    if (!_isEmailValid) {
      return const SizeBox();
    } else {
      return GradientButton(
        onTap: () {
          // Navigation logic
        },
        text: labels[31]["labelsText"],
      );
    }
  }

现在,GradientButton是一个自定义小部件,它接受一个名为textString参数。当我传递一个字符串,如text: "Proceed",应用程序运行正常,但是,当我试图从不同的Map变量分配一个字符串时,我得到错误:

在构建BlocBuilder〈ShowButtonBloc,ShowButtonState〉时抛出以下_TypeError(脏,依赖关系:[_InheritedProviderScope〈ShowButtonBloc?〉],state:_BlocBuilderBaseState〈ShowButtonBloc,ShowButtonState〉#e4f0a):类型“Null”不是类型“String”的子类型

这里,标签是final List<Map<String, dynamic>>labels[31]["labelsText"] = "Proceed"。业务要求我现在将文本存储在Map中,然后从API中获取这些内容,这就是为什么不能仅仅将静态文本分配给按钮。
以下是我的Bloc看起来像:

  • show_button_state。 dart *
class ShowButtonState {
  final bool show;
  const ShowButtonState({
    required this.show,
  });
}
  • show_button_event。 dart *
class ShowButtonEvent {
  final bool show;
  const ShowButtonEvent({
    required this.show,
  });
}
  • show_button_bloc。 dart *
class ShowButtonBloc extends Bloc<ShowButtonEvent, ShowButtonState> {
  ShowButtonBloc()
      : super(
          const ShowButtonState(show: false),
        ) {
    on<ShowButtonEvent>(
      (event, emit) => emit(
        ShowButtonState(show: event.show),
      ),
    );
  }
}

申请

我想知道为什么当我从变量传递字符串时会出现错误,以及如何解决这个问题。

55ooxyrt

55ooxyrt1#

这似乎和你的血液控制中心没什么关系

labels[31]["labelsText"]

并不存在
因为你没有发布那部分,很难再帮助你了。确保它引用了某个存在的内容。* * 是否有32个标签(记住,第一个标签的索引为0)?第32个 * 有 * 一个属性“labelsText”设置为文本吗?也检查一下错别字。

相关问题