FittedBox 与 Consumer 一起使用时会引发错误。 '宽度> 0.0':不正确
该代码在不使用 ChangeNotifierProvider 类的 Consumer 的情况下工作正常,但当我访问 ChangeNotifier 类中定义的变量时,该代码将无法工作。这意味着每当变量更新时,代码都会抛出一个指向 FittedBox 的错误。
断言失败:第 319 行 pos 12:'width > 0.0':不是真的。单击错误链接时指向 FittedBox。
我正在分享代码,无论有没有问题。
这很好用。
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,
),
),
)
)
],
),
),
);
}
);
},);
}
}
这行不通。
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,
),
),
)
)
],
),
),
);
}
);
},);
}
}
这是 ChangeNotifier 类
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();
}
}
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();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论