当前位置:网站首页>Talk about DART's null safety feature
Talk about DART's null safety feature
2022-07-07 23:01:00 【InfoQ】
Preface
null safety
null safety
null safety
Nullable and non-nullable type
null satety
String
String
null
?
String?
null
String? str1;
String str2;
// OK
str1 = null;
// Report errors
str2 = null;
// OK
List<String?> strList1 = ['a', null, 'c'];
// Report errors
List<String> strList2 = ['a', null, 'c'];
Null assertion operator !
valiable!.xx
nullable
null
!
int? couldReturnNullButDoesnt() => -3;
void main() {
int? nullableInt = 1;
List<int?> intListHasNull = [2, null, 4];
int a = nullableInt!;
int b = intListHasNull.first!;
int c = couldReturnNullButDoesnt()!.abs();
print('a is $a.');
print('b is $b.');
print('c is $c.');
}
Type promotion (Type promotion)
String? str;
if (str != null) {
print(str); // It has been ensured that it is not empty , No compilation errors
}
late keyword
late
late
- This variable has not been assigned a value yet ;
- We will assign a value to this variable after ;
- We guarantee that we will assign a value to this variable before using it .
class Meal {
late String _decription; // Error declaration
set description(String desc) {
_description = 'Meal Description: $desc';
}
String get description => _description;
}
void main() {
final myMeal = Meal();
myMeal.description = 'Feijoada';
print(myMeal.description);
}
late
late
if
class Team {
late final Coach coach;
}
class Coach {
late final Team team;
}
void main() {
final myTeam = Team();
final myCoach = Coach();
myTeam.coach = myCoach;
myCoach.team = myTeam;
print(' Get it done !');
}
Upgrade and modify
- Class properties : The non empty class attribute needs to be determined by the initial value by default , If the class attribute is initialized in another method , Then you can add
late
keyword , Indicates that the property will be initialized later , And it's not empty . If the property may be empty , Then add?
Empty sign . This nullable attribute needs special attention when used , You need to check whether it is empty before you can use , Or usevariable?.xx
Access... In this form , If an explicit attribute has a value , You need to use ! Force specified to be non empty , Such asvariable!.xx
.
- Method parameter : Set whether the parameter can be null or required as required , For mandatory parameters, add... Before the parameter declaration
required
keyword , Can be empty plus?
identification .
- Return value : If the return value may be
null
, Just add... After the return parameter?
identification . If an object in the collection object is empty , Then you need to add... After the type of the collection ? identification , for exampleList<int?>
.
- Will rely on the lowest Dart The version is revised to 2.12.0
environment:
sdk: ">=2.12.0 <3.0.0"
- Modify some third-party plug-in dependencies , Upgrade to support null safety edition , For details, please refer to pub Version Description on .
Dio Step on the pit
Dio
DioError [DioErrorType.other]: type 'Null' is not a subtype of type 'Object'
issue
Dio
CookieManager
headers
Cookie
_cookie
null
_cookie
Cookie
// CookieManager Previous code ,_cookie May be null Lead to Dio The abnormal
void onRequest(
RequestOptions options,
RequestInterceptorHandler handler,
) {
options.headers['Cookie'] = _cookie;
return super.onRequest(options, handler);
}
// After modification
@override
void onRequest(
RequestOptions options,
RequestInterceptorHandler handler,
) {
// null safety You can set... Only if it is not empty
if (_cookie != null) {
options.headers['Cookie'] = _cookie;
}
return super.onRequest(options, handler);
}
summary
null safety
null safety
Dart
dynamic
RequestOptions options
headers
Map<String, dynamic>
null
dynamic
null
边栏推荐
- 行测-图形推理-3-对称图形类
- 【刷题记录】3. 无重复字符的最长子串
- Details of the open source framework of microservice architecture
- Basic knowledge of linked list
- 关于海康ipc的几个参数
- Quick sort (diagram +c code)
- Early childhood education industry of "screwing bar": trillion market, difficult to be a giant
- How pyGame rotates pictures
- Variables and constants
- Personal statement of testers from Shuangfei large factory: is education important for testers?
猜你喜欢
Explain in detail the communication mode between arm A7 and risc-v e907 on Quanzhi v853
There is another problem just online... Warm
What is fake sharing after filling the previous hole?
Quick sort (diagram +c code)
行測-圖形推理-4-字母類
Personal statement of testers from Shuangfei large factory: is education important for testers?
行测-图形推理-8-图群类
Leetcode1984. Minimum difference in student scores
行测-图形推理-4-字母类
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
随机推荐
安踏DTC | 安踏转型,构建不只有FILA的增长飞轮
知识点滴 - PCB制造工艺流程
开发那些事儿:Go加C.free释放内存,编译报错是什么原因?
Debezium series: introducing support for the final operator
Digital transformation: five steps to promote enterprise progress
详解全志V853上的ARM A7和RISC-V E907之间的通信方式
ASP.NET Core入门五
Unity FAQ (I) lack of references
Sword finger offer 28 Symmetric binary tree
“拧巴”的早教行业:万亿市场,难出巨头
0-5vac to 4-20mA AC current isolated transmitter / conversion module
筑起云端 “免疫”屏障,让你的数据有备无患
Line test - graphic reasoning -5- one stroke class
ASEMI整流桥KBPC1510的型号数字代表什么
C # Development -- pit encountered in JS intermodulation
Sword finger offer 27 Image of binary tree
Debezium series: MySQL tombstone event
Loki, the "open source star picking program", realizes the efficient management of harbor logs
This time, let's clear up: synchronous, asynchronous, blocking, non blocking
PHP records the pitfalls encountered in the complete docking of Tencent cloud live broadcast and im live group chat