Flutter,带有声明的 Late 关键字

don*_*why 17 dart flutter

late TextEditingController _controller = TextEditingController();
late String someString = "someString";

TextEditingController _controller = TextEditingController();
String someString = "someString";
Run Code Online (Sandbox Code Playgroud)

他们还是不一样吗?或者完全一样???在任何情况下(在表演中)

kri*_*yaa 16

以下陈述

  1. late TextEditingController _controller = TextEditingController();
  2. TextEditingController _controller = TextEditingController();

两者都一样吗?

这就像说var TextEditingController _controller = TextEditingController();

什么时候使用late

在某些情况下,您最初并不知道变量的值。该值可能是null.

由于 dart 是null safe你必须使用?late keyword

var someString;  Flutter doesn't allow this
Run Code Online (Sandbox Code Playgroud)

要克服这个问题,您可以执行以下任一操作:

   var someString?;  Saying flutter the value is nullable. So that flutter would warn you when you access this variable
   late someString;  You are assuring flutter that you will initialize this in your code before its used.

Run Code Online (Sandbox Code Playgroud)


小智 2

使用 Late 关键字声明稍后将初始化的变量。

late data_type variable_name;
Run Code Online (Sandbox Code Playgroud)

当晚变量在初始化之前使用时,会发生此错误。您必须记住,虽然您使用了一些标记为“延迟”的变量或数据,但它们的值并未事先更改或保存。

late String name;
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Text(name)
    //runtime error: 
    //LateInitializationError: Field 'name' has not been initialized.
  );
} 
Run Code Online (Sandbox Code Playgroud)

这表示此时变量名没有值;它将在未来被初始化。我们在 Text() 小部件中使用了这个变量,而没有首先初始化它。

解决此问题

late String name;

@override
void initState() {
  name = "Flutter Campus";
  super.initState();
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Text(name)
  );
} 
Run Code Online (Sandbox Code Playgroud)