Reputation: 374
The code works fine without using the Consumer of ChangeNotifierProvider class but won't work when I accessed the variable defined in the ChangeNotifier class. This means whenever the variable is updated the code throws an error that is pointed towards the FittedBox.
Failed assertion: line 319 pos 12: 'width > 0.0': is not true. Points towards FittedBox when clicked on error link.
I'm sharing the code with and without a problem.
This works fine.
class SupervisedByButton extends StatelessWidget {
const SupervisedByButton({
Key? key,
required this.uid
}) : super(key: key);
final String uid;
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(create: (context)=>SupervisedByButtonVM(uid),
builder: (context,viewModel)
{
return Consumer<SupervisedByButtonVM>(
builder: (context,vm,child)
{
return Container(
height: 50.h,
width: 140.w,
decoration: BoxDecoration(
color: kSupervisedByColor,
),
child: Padding(
padding: EdgeInsets.symmetric(vertical: 5.h,horizontal: 5.w),
child: Column(
children: [
Flexible(
child: FittedBox(
child: Text(
"Supervised by",
style: kPoppinsLight300.copyWith(
fontSize: 12.sp,
color: kWhiteColor,
),
),
),
),
Flexible(
child:
FittedBox(
child: Text(
"My Name", //this work fine
style: kPoppinsMedium500.copyWith(
fontSize: 15.sp,
color: kWhiteColor,
),
),
)
)
],
),
),
);
}
);
},);
}
}
This won't' work.
class SupervisedByButton extends StatelessWidget {
const SupervisedByButton({
Key? key,
required this.uid
}) : super(key: key);
final String uid;
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(create: (context)=>SupervisedByButtonVM(uid),
builder: (context,viewModel)
{
return Consumer<SupervisedByButtonVM>(
builder: (context,vm,child)
{
return Container(
height: 50.h,
width: 140.w,
decoration: BoxDecoration(
color: kSupervisedByColor,
),
child: Padding(
padding: EdgeInsets.symmetric(vertical: 5.h,horizontal: 5.w),
child: Column(
children: [
Flexible(
child: FittedBox(
child: Text(
"Supervised by",
style: kPoppinsLight300.copyWith(
fontSize: 12.sp,
color: kWhiteColor,
),
),
),
),
Flexible(
child:
FittedBox(
child: Text(
vm.getUserName, //this won't work and throws error
style: kPoppinsMedium500.copyWith(
fontSize: 15.sp,
color: kWhiteColor,
),
),
)
)
],
),
),
);
}
);
},);
}
}
Here is the ChangeNotifier Class
class SupervisedByButtonVM extends ChangeNotifier{
final UserProfileService _userProfileService=GetIt.I.get<UserProfileService>();
String _userName="";
final Logger _logger=Logger();
SupervisedByButtonVM(String uid)
{
userName(uid);
}
Future userName(String uid)async
{
try{
print("uid of teacher is $uid");
UserSignupModel _userSignupModel;
_userSignupModel=await _userProfileService.getProfileDocument(uid,"teacher");
setUserName=_userSignupModel.fullName??"Unknown";
}
catch(error)
{
_logger.e("error at SupervisedByButtonVM /userName.dart $error");
}
}
String get getUserName=>_userName;
set setUserName(String user)
{
_userName=user;
notifyListeners();
}
}
Upvotes: 1
Views: 264