当前位置:网站首页>Talk about DART's null safety feature
Talk about DART's null safety feature
2022-07-07 23:01:00 【InfoQ】
Preface
null safetynull safetynull safetyNullable and non-nullable type
null satetyStringStringnull?String?nullString? 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!.xxnullablenull!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
latelate- 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);
}
latelateifclass 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
latekeyword , 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?.xxAccess... 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
requiredkeyword , 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
DioDioError [DioErrorType.other]: type 'Null' is not a subtype of type 'Object'issueDioCookieManagerheadersCookie_cookienull_cookieCookie// 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 safetynull safetyDartdynamicRequestOptions optionsheadersMap<String, dynamic>nulldynamicnull
边栏推荐
- 行测-图形推理-9-线条问题类
- 聊聊 Dart 的空安全 (null safety) 特性
- Redis official ORM framework is more elegant than redistemplate
- UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
- 每日一题——PAT乙级1002题
- Matplotlib quick start
- Unity technical notes (I) inspector extension
- PCL .vtk文件与.pcd的相互转换
- 0-5vac to 4-20mA AC current isolated transmitter / conversion module
- Select sort (illustration +c code)
猜你喜欢
![LeetCode206. Reverse linked list [double pointer and recursion]](/img/3c/84351e771ac9763c1e5f7b4921c099.jpg)
LeetCode206. Reverse linked list [double pointer and recursion]

Nx10.0 installation tutorial

GBU1510-ASEMI电源专用15A整流桥GBU1510

PCL . VTK files and Mutual conversion of PCD

Sword finger offer 55 - I. depth of binary tree

How pyGame rotates pictures

Ligne - raisonnement graphique - 4 - classe de lettres

不夸张地说,这是我见过最通俗易懂的,pytest入门基础教程

What does it mean to prefix a string with F?
![LeetCode142. Circular linked list II [two pointers, two methods for judging links in the linked list and finding ring points]](/img/5e/e442c8649b9123a9d9df7c0d61a564.jpg)
LeetCode142. Circular linked list II [two pointers, two methods for judging links in the linked list and finding ring points]
随机推荐
Understand the autograd package in pytorch
Debezium series: set role statement supporting mysql8
Debezium系列之:源码阅读之SnapshotReader
关于海康ipc的几个参数
小程序多种开发方式对比-跨端?低代码?原生?还是云开发?
C development -- WPF simple animation
Pyqt GUI interface and logic separation
Some parameters of Haikang IPC
GBU1510-ASEMI电源专用15A整流桥GBU1510
数字藏品加速出圈,MarsNFT助力多元化文旅经济!
聊聊 Dart 的空安全 (null safety) 特性
详解全志V853上的ARM A7和RISC-V E907之间的通信方式
Leetcode94. Middle order traversal of binary trees
Debezium series: binlogreader for source code reading
Microbial health network, how to restore microbial communities
Debezium series: source code reading snapshot reader
[problem] pytorch installation
Debezium系列之: 支持在 KILL 命令中使用变量
What does it mean to prefix a string with F?
Line test - graphic reasoning - 3 - symmetric graphic class