Flutter-Non-nullable 实例字段“{0}”必须初始化错误

问题描述

我创建了一个单独的类“DirectionDetails”;

class DirectionDetails{

  int distanceValue;
  int durationValue;
  String distanceText;
  String durationText;
  String encodedPoints;

  DirectionDetails(this.distanceValue,this.durationValue,this.distanceText,this.durationText,this.encodedPoints);

}

当我尝试通过 DirectionDetails tripDirectionDetails; 在主类中初始化它时,它给出了

不可为空的实例字段 'tripDirectionDetails' 必须被初始化

错误。但正如它所暗示的那样,当我添加“迟到”修饰符时 - 它不会显示任何错误但是当我运行应用程序时,它给出了,

LateInitializationError:字段“tripDirectionDetails”尚未被 已初始化。

运行时错误

我尝试了另一种方法,当我尝试在主类中初始化 tripDirectionDetails 时,

DirectionDetails tripDirectionDetails = new DirectionDetails();

修改 DirectionDetails 类,

class DirectionDetails{

  int distanceValue;
  int durationValue;
  String distanceText;
  String durationText;
  String encodedPoints;

  DirectionDetails({this.distanceValue = 0,this.durationValue = 0,this.distanceText = "",this.durationText = "",this.encodedPoints = ""});
  
}

应用成功运行,它检索“DirectionDetails”类中的所有值仅用于初始重启。

但是当我退出应用程序并返回时,它会出现以下错误

LateInitializationError:字段“tripDirectionDetails”尚未被 已初始化。

非常感谢您的帮助。

谢谢

解决方法

发生这种情况是因为您在初始化之前尝试使用 tripDirectionDetails。您应该仅将 late 用于稍后将在尝试使用之前初始化的非空变量:

tripDirectionDetails != null /// This will trigger an error

您应该在 buildinitState 中使用它之前对其进行初始化:

@override
  void initState() {
    tripDirectionDetails = DirectionDetails();
    super.initState();
  }

但由于 tripDirectionDetails 可以为 null,最好这样声明:

DirectionDetails? tripDirectionDetails;

tripDirectionDetails != null /// Won't trigger an error