1

从firebase获取一些数据并使用模型对其进行解码时发生这种情况,方法如下:

UserModel? userModel;
void getUser() {
emit(GetUserLoadingsState());

FirebaseFirestore.instance.collection('users').doc(uId).get().then((value) {
  userModel = UserModel.fromJson(value.data()!);
  emit(GetUserSuccessState());
}).catchError((error) {
  emit(GetUserErrorState(error.toString()));
});

}

调用方法

return BlocProvider(
  create: (BuildContext context) => AppCubit()..getUser(),
  child: BlocConsumer<AppCubit, AppStates>(
    listener: (context, state) {},
    builder: (context, state) {
      return MaterialApp(
        debugShowCheckedModeBanner: false,
        theme: lightTheme,
        home: startWidget,
      );
    },
  ),
);

和消费者

BlocConsumer<AppCubit, AppStates>(
  listener: (context, state) {},
  builder: (context, state) {
    var user = AppCubit.get(context).userModel!;
4

1 回答 1

2

为了您的错误消息和代码,您!在 2 个字段中使用了空检查运算符;

  1. 字段应该是这样的;
UserModel? userModel;
void getUser() {
emit(GetUserLoadingsState());

FirebaseFirestore.instance.collection('users').doc(uId).get().then((value) {
  if (value.exists) {
    userModel = UserModel.fromJson(value.data()!);
    emit(GetUserSuccessState());
  }
}).catchError((error) {
  emit(GetUserErrorState(error.toString()));
});
  1. 字段应该是这样的;
BlocConsumer<AppCubit, AppStates>(
  listener: (context, state) {},
  builder: (context, state) {
    if (AppCubit.get(context).userModel != null)
      var user = AppCubit.get(context).userModel!;

!除非您知道自己的值不为 null,否则不应使用null 检查运算符。

于 2022-01-06T19:19:26.667 回答