Reputation: 2449
I am trying to call data from Firebase
but I found the below error, while start login for first time, and this is the below error:
The following NoSuchMethodError was thrown building BlocBuilder<AppCubit, AppStates>(dirty, state: _BlocBuilderBaseState<AppCubit, AppStates>#b335d):
The getter 'cover' was called on null.
Receiver: null
Tried calling: cover
and this is the below related code:
image: DecorationImage(
image: NetworkImage(
'${userModel.cover}',
),
fit: BoxFit.cover,
),
and this is the full code I have :
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:mysocially/shared/cubit/cubit.dart';
import 'package:mysocially/shared/cubit/states.dart';
import 'package:mysocially/styles/icon_broken.dart';
class SettingsScreen extends StatelessWidget {
const SettingsScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return BlocConsumer<AppCubit, AppStates>(
listener: (context, state) {},
builder: (context, state) {
var userModel = AppCubit.get(context).model;
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
height: 190.0,
child: Stack(
alignment: AlignmentDirectional.bottomCenter,
children: [
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
width: double.infinity,
height: 140.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(4.0),
topRight: Radius.circular(4.0),
),
image: DecorationImage(
image: NetworkImage(
'${userModel.cover}',
),
fit: BoxFit.cover,
),
),
),
),
CircleAvatar(
radius: 51.0,
backgroundColor:
Theme.of(context).scaffoldBackgroundColor,
child: CircleAvatar(
// radius: responsive.height * 0.025,
radius: 50.0,
backgroundImage: NetworkImage(
'${userModel.image}',
),
),
),
],
),
),
SizedBox(
height: 5.0,
),
Text(
'${userModel.name}',
style: Theme.of(context).textTheme.bodyText1,
),
Text(
'${userModel.bio}',
style: Theme.of(context).textTheme.caption,
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 20.0),
child: Row(
children: [
Expanded(
child: InkWell(
child: Column(
children: [
Text(
'100',
style: Theme.of(context).textTheme.subtitle2,
),
Text(
'Posts',
style: Theme.of(context).textTheme.caption,
),
],
),
onTap: () {},
),
),
Expanded(
child: InkWell(
child: Column(
children: [
Text(
'100',
style: Theme.of(context).textTheme.subtitle2,
),
Text(
'Posts',
style: Theme.of(context).textTheme.caption,
),
],
),
onTap: () {},
),
),
Expanded(
child: InkWell(
child: Column(
children: [
Text(
'62',
style: Theme.of(context).textTheme.subtitle2,
),
Text(
'Photos',
style: Theme.of(context).textTheme.caption,
),
],
),
onTap: () {},
),
),
Expanded(
child: InkWell(
child: Column(
children: [
Text(
'200',
style: Theme.of(context).textTheme.subtitle2,
),
Text(
'Followers',
style: Theme.of(context).textTheme.caption,
),
],
),
onTap: () {},
),
),
Expanded(
child: InkWell(
child: Column(
children: [
Text(
'600',
style: Theme.of(context).textTheme.subtitle2,
),
Text(
'Followings',
style: Theme.of(context).textTheme.caption,
),
],
),
onTap: () {},
),
),
],
),
),
Row(
children: [
Expanded(
child: OutlinedButton(
onPressed: () {},
child: Text('Add Photos'),
),
),
SizedBox(width: 10.0,),
OutlinedButton(
onPressed: () {},
child: Icon(
IconBroken.Edit,
size: 20.0,
),
),
],
),
],
),
);
},
);
}
}
cubit class which containes the business logic:
class AppCubit extends Cubit<AppStates> {
AppCubit() : super(AppInitialState());
static AppCubit get(context) => BlocProvider.of(context);
UserModel model;
void getUserData() {
emit(AppGetUserLoadingState());
FirebaseFirestore.instance.collection('users').doc(uId).get().then((value) {
// print(value.data());
model = UserModel.fromJson(value.data());
emit(
AppGetUserSuccessState(),
);
}).catchError((error) {
print(error.toString());
emit(
AppGetUserErrorState(
error.toString(),
),
);
});
}
}
The code works Fine when I make hot reload
or restart the app but it gives this error first Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
and then show the data...
So How can I solve this problem?
Upvotes: 0
Views: 50
Reputation: 5333
Since you are using BLoC, you should get the user model from it like this:
final userModel = state.model;
and not like this:
var userModel = AppCubit.get(context).model;
Also, when you only need to get the state of the cubit (for widget building), use BlocBuilder
and not a BlocConsumer
.
Upvotes: 1