"TextEditingController titleController;" 和 "titleController = TextEditingController();" 有什么区别?
What is the difference between "TextEditingController titleController;" and "titleController = TextEditingController();"?
很抱歉,如果这是一个非常简单的问题,但对我来说仍然是一个基本问题,要了解这两行代码之间的区别是什么?:
TextEditingController titleController;
和
titleController = TextEditingController();
为了更清晰,我的意思是代码第一行中的 titleController
与第二行中的 titleController
之间有什么区别?
我们什么时候应该使用第一个,什么时候使用第二个?
第一个例子没有初始化,第二个例子是。对我来说,没有任何情况我会在不初始化的情况下声明 TextEditingController
。尽管您可以将空控制器传递给 TextFormField
而不会出错,但是一旦您尝试对其执行任何操作(例如添加侦听器),您就会收到“调用空值”错误.
您最好直接初始化它,然后它就可以立即运行了。
final titleController = TextEditingController();
两条线必须一起使用。让我们看看每一行代表什么:
“第一行”:
TextEditingController titleController;
只是声明了一个TextEditingController
类型的变量,叫做titleController
。它还没有被赋予一个值,虽然它没有收到一个值,但它的值将被认为是 null
.
还有其他声明变量的方法(如声明为 dynamic
,或使用 var
、final
、const
等),您可以阅读Dart's Language tour 中的更多内容。我不会在这里解释它们,因为它与问题没有太大关系。
“二线”:
titleController = TextEditingController();
正在为 titleController
声明的变量赋值。给定的值是:TextEditingController()
,表示来自这个 class 的对象的新实例。 如果不先执行另一行,则不能执行此行。 否则编译器将不知道名称 titleController
代表什么。
(此外,这很有意义,对吧?首先你有一个特定类型的变量,然后你给这个变量一个相同类型的值。)
所以你通常两者都做。首先声明变量,然后给它赋值。可能是因为所有关键字都与“TextEditingController”相关,所以有点混淆。这是字符串 class:
的等效示例
String a; // the first line
a = "Your String"; // the second line
这是等效的,可以在一行中完成:
String a = "Your String";
// Or, in your case:
TextEditingController titleController = TextEditingController();
这样你既可以声明变量又可以给它一个初始值。
很抱歉,如果这是一个非常简单的问题,但对我来说仍然是一个基本问题,要了解这两行代码之间的区别是什么?:
TextEditingController titleController;
和
titleController = TextEditingController();
为了更清晰,我的意思是代码第一行中的 titleController
与第二行中的 titleController
之间有什么区别?
我们什么时候应该使用第一个,什么时候使用第二个?
第一个例子没有初始化,第二个例子是。对我来说,没有任何情况我会在不初始化的情况下声明 TextEditingController
。尽管您可以将空控制器传递给 TextFormField
而不会出错,但是一旦您尝试对其执行任何操作(例如添加侦听器),您就会收到“调用空值”错误.
您最好直接初始化它,然后它就可以立即运行了。
final titleController = TextEditingController();
两条线必须一起使用。让我们看看每一行代表什么:
“第一行”:
TextEditingController titleController;
只是声明了一个TextEditingController
类型的变量,叫做titleController
。它还没有被赋予一个值,虽然它没有收到一个值,但它的值将被认为是 null
.
还有其他声明变量的方法(如声明为 dynamic
,或使用 var
、final
、const
等),您可以阅读Dart's Language tour 中的更多内容。我不会在这里解释它们,因为它与问题没有太大关系。
“二线”:
titleController = TextEditingController();
正在为 titleController
声明的变量赋值。给定的值是:TextEditingController()
,表示来自这个 class 的对象的新实例。 如果不先执行另一行,则不能执行此行。 否则编译器将不知道名称 titleController
代表什么。
(此外,这很有意义,对吧?首先你有一个特定类型的变量,然后你给这个变量一个相同类型的值。)
所以你通常两者都做。首先声明变量,然后给它赋值。可能是因为所有关键字都与“TextEditingController”相关,所以有点混淆。这是字符串 class:
的等效示例String a; // the first line
a = "Your String"; // the second line
这是等效的,可以在一行中完成:
String a = "Your String";
// Or, in your case:
TextEditingController titleController = TextEditingController();
这样你既可以声明变量又可以给它一个初始值。