Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 运算符'*';can';不能无条件地调用,因为接收方可以是';空';。尝试将空检查添加到目标(';!';)_Flutter_Dart_Flutter Web_Dart Null Safety - Fatal编程技术网

Flutter 运算符'*';can';不能无条件地调用,因为接收方可以是';空';。尝试将空检查添加到目标(';!';)

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; 静态双屏幕宽度; 静态双屏幕高度; 静态双?默认大小; 静

我在UI中使用此代码来实现响应。因此,这段代码的基本功能是计算屏幕的大小,我使用下面的函数根据Figma或Adobe XD中提供给我的设计输入准确的字体大小。使用这种方法,我能够创建像素完美的UI

升级到
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!*大小
      所以您两次解决了同一问题,但不知何故忘记了如何解决第三种方法?