Faizan Ahmad
Faizan Ahmad

Reputation: 374

FittedBox throws an error when used with Consumer. 'width > 0.0': is not true

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

Answers (0)

Related Questions