在 FLUTTER/DART 中,为啥我们有时在声明变量的时候会在“String”后面加上问号?
Posted
技术标签:
【中文标题】在 FLUTTER/DART 中,为啥我们有时在声明变量的时候会在“String”后面加上问号?【英文标题】:In FLUTTER / DART, why do we sometimes add a question mark to "String" when declaring a variable?在 FLUTTER/DART 中,为什么我们有时在声明变量的时候会在“String”后面加上问号? 【发布时间】:2021-06-25 19:51:54 【问题描述】:在演示应用中,我们找到了一个“final String?title;”的实例 -> 为什么要添加这个“?”在字符串类型之后?
class MyHomePage extends StatefulWidget
MyHomePage(Key? key, this.title) : super(key: key);
**final String? title;**
@override
_MyHomePageState createState() => _MyHomePageState();
同理,为什么在使用的时候,我们要加一个“!” ?
return Scaffold(
appBar: AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: **Text(widget.title!),**
),
body: Center(
【问题讨论】:
dart.dev/null-safety/understanding-null-safety 【参考方案1】:这是 null 安全的,问号表示这个 String?
可能为 null,flutter 将允许您将 null 分配给它。 String
不能为空,编译前会报错。
如果您定义了一个变量String? name
,并且您想稍后在文本小部件中使用它,您将收到错误消息。因为 Text 小部件只接受不可为空的类型。但是如果你确定name
永远不会为空,你告诉flutter 不要担心它并且你知道你在做什么,你可以通过添加!
来做到这一点:Text(name!)
。
【讨论】:
我想知道它是否与空安全性有关。非常感谢您的快速回答。怎么样呢 ”!”在“文本(WIDGET.TITLE!)? 我编辑了我的答案,相信我回答了你关于!
的第二个问题。
它与空安全有关,它是在空安全中编写飞镖。您应该检查并阅读它,它将使您的代码更快、更小并且不易出错。
非常感谢您的回答。非常清楚!您可能已经猜到了,我是 Flutter 开发的初学者。但爱它! :)
想知道是否可以在 Stack Overflow 中创建开发人员的“虚拟团队”,以便像我这样的初学者可以与更多“高级”开发人员分享?【参考方案2】:
variable_type ? name_of_variable;
表示 name_of_variable 可以为空。
variable_type name_of_variable1;
表示 name_of_variable1 不能为空,应立即初始化。
late variable_type name_of_variable2;
表示name_of_variable2不能为空,可以稍后初始化。
late variable_type name_of_variable3;
variable_type ? name_of_variable4;
name_of_variable4=some_data;
name_of_variable3=name_of_variable4!;// name_of_variable4! means that you are sure 100% it never will be null
int类型的实例:
int ? a=null; // OK
int b=null; // b cannot be equal null
late int c =null; // c cannot be equal null
late int d;
d=5; //OK
late int d; // if you never initialize it, you ll got exception
int e=5;
int? f=4;
int ? z;
e=f!; // OK, You are sure that f never are null
e=z!;// You get exception because z is equal null
【讨论】:
感谢您的解释!很有帮助。 你的例子中的“迟到”是什么意思?以上是关于在 FLUTTER/DART 中,为啥我们有时在声明变量的时候会在“String”后面加上问号?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Flutter/Dart 中将自定义 DateTime 格式化为 DateTime?