Flutter 运算符'*';can';不能无条件地调用,因为接收方可以是';空';。尝试将空检查添加到目标(';!';)
我在UI中使用此代码来实现响应。因此,这段代码的基本功能是计算屏幕的大小,我使用下面的函数根据Figma或Adobe XD中提供给我的设计输入准确的字体大小。使用这种方法,我能够创建像素完美的UI 升级到Flutter 运算符'*';can';不能无条件地调用,因为接收方可以是';空';。尝试将空检查添加到目标(';!';),flutter,dart,flutter-web,dart-null-safety,Flutter,Dart,Flutter Web,Dart Null Safety,我在UI中使用此代码来实现响应。因此,这段代码的基本功能是计算屏幕的大小,我使用下面的函数根据Figma或Adobe XD中提供给我的设计输入准确的字体大小。使用这种方法,我能够创建像素完美的UI 升级到flatter2.0.3后,我收到了空安全错误。我能够解决大多数问题,但我无法解决这个错误。 请给我一些建议 完整代码 导入“包装:颤振/材料.省道”; 类大小图{ 静态MediaQueryData?\u MediaQueryData; 静态双屏幕宽度; 静态双屏幕高度; 静态双?默认大小; 静
flatter2.0.3
后,我收到了空安全错误。我能够解决大多数问题,但我无法解决这个错误。
请给我一些建议
完整代码
导入“包装:颤振/材料.省道”;
类大小图{
静态MediaQueryData?\u MediaQueryData;
静态双屏幕宽度;
静态双屏幕高度;
静态双?默认大小;
静态定向?定向;
void init(构建上下文){
_mediaQueryData=MediaQuery.of(上下文);
screenWidth=\u mediaQueryData!.size.width;
屏幕高度=_mediaQueryData!.size.height;
方向=_mediaQueryData!。方向;
如果(方向==方向.横向){
默认大小=屏幕高度!*0.024;
}否则{
默认大小=屏幕宽度!*0.024;
}
}
}
双倍大小(双倍大小){
var defaultsSize=SizeConfig.defaultSize*size;
返回(defaultsSize/10);
}
//根据屏幕大小获得相应的高度
双倍比例Creenheight(双倍输入){
双屏幕高度=SizeConfig.screenHeight!;
//812是设计师使用的布局高度
返回(输入权限/812.0)*屏幕高度;
}
//根据屏幕大小获得相应的宽度
双比例屏幕宽度(双输入宽度){
双屏幕宽度=SizeConfig.screenWidth!;
//375是Figma提供的布局宽度
返回(输入宽度/375.0)*屏幕宽度;
}
错误
因为
SizeConfig.defaultSize
是可空的,所以需要确保其值不应为空
您可以添加一些断言来通知调用方应该首先初始化SizeConfig
。然后,您可以将其更改为SizeConfig.defaultSize代码>
样本
double getSize(double size) {
assert(
SizeConfig.defaultSize != null,
"SizeConfig should be initialized (only once) before calling getSize(...). Refer to SizeConfig.init(...).",
);
var defaultsSize = SizeConfig.defaultSize! * size;
return (defaultsSize / 10);
}
由于SizeConfig.defaultSize
可为空,因此需要确保其值不应为空
您可以添加一些断言来通知调用方应该首先初始化SizeConfig
。然后,您可以将其更改为SizeConfig.defaultSize代码>
样本
double getSize(double size) {
assert(
SizeConfig.defaultSize != null,
"SizeConfig should be initialized (only once) before calling getSize(...). Refer to SizeConfig.init(...).",
);
var defaultsSize = SizeConfig.defaultSize! * size;
return (defaultsSize / 10);
}
问题:
出现此错误是因为您正在调用的对象可以是null
例如:
int?计数=1;
void main(){
打印(计数*2);//错误:无法无条件调用运算符“*”。。。
}
解决方案:
- 使用局部变量:
int?计数=1;
void main(){
var i=计数;
如果(i!=null){
打印(i*2);//打印2
}
}
- 使用bang运算符(
!
)
int?计数=1;
void main(){
打印(计数!*2);//打印2
}
问题:
出现此错误是因为您正在调用的对象可以是
null
例如:
int?计数=1;
void main(){
打印(计数*2);//错误:无法无条件调用运算符“*”。。。
}
解决方案:
- 使用局部变量:
int?计数=1;
void main(){
var i=计数;
如果(i!=null){
打印(i*2);//打印2
}
}
- 使用bang运算符(
!
)
int?计数=1;
void main(){
打印(计数!*2);//打印2
}
将其更改为SizeConfig.defaultSize!*大小
因此,您两次解决了同一问题,但不知怎的忘记了第三种方法如何解决?将其更改为SizeConfig.defaultSize!*大小
所以您两次解决了同一问题,但不知何故忘记了如何解决第三种方法?