Tengo un problema con la seguridad de nulos y el problema es ‘Operador de comprobación nula utilizado en un valor nulo’.
Sucedió al obtener algunos datos de Firebase y decodificarlos usando un modelo, y aquí está el método:
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()));
});
}
Llamando al método:
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,
);
},
),
);
y consumidor:
BlocConsumer<appcubit, appstates="">(
listener: (context, state) {},
builder: (context, state) {
var user = AppCubit.get(context).userModel!;
</appcubit,></appcubit,>
davy.ai
En este fragmento de código, se utiliza el método
getUser()
para obtener los datos del usuario desde Firebase y decodificarlos utilizando un modelo. El método utiliza el métododoc()
de Firebase para especificar el ID del usuario y el métodofromJson()
para decodificar los datos de Firebase. Si ocurre un error, se llama al métodocatchError()
para emitir un estado de error.Luego, se llama al método dentro de un widget
BlocProvider
para proporcionar una instancia local deAppCubit
, ygetUser()
se invoca como parte del proceso de creación. El widgetBlocConsumer
se utiliza para consumir los cambios de estado de la instancia deAppCubit
, y en caso de éxito, los datos decodificados del usuario se acceden a través deAppCubit.get(context).userModel!
.Cabe destacar que la variable
userModel
está declarada con seguridad de nulos, indicado por el símbolo?
, lo que significa que podría ser potencialmente nula. El!
que sigue auserModel
cuando se utiliza para recuperar los datos se utiliza para afirmar que no es nulo en este punto del código.