Dart 文档
DartPad 线上工具
https://dartpad.cn
https://gist.github.com/
准备工作
List 列表
常用属性:
- length 长度
- reversed 翻转
- isEmpty 是否为空
- isNotEmpty 是否为不空
常用方法
- add 增加
- addAll 拼接数组
- indexOf 查找 传入具体值
- remove 删除 传入具体值
- removeAt 删除 传入索引值
- fillRange 修改
- insert(index, value) 指定位置插入
- insertAll(index, list) 指定位置插入 List
- toList() 其他类型转换成 List
- join() List 转换成字符串
- split() 字符串转化成 List
- forEach
- map
- where
- any
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28List myList = ['a'];
print(myList); // [a]
myList.add('b'); // [a, b]
myList.addAll(['c', 'd']); // [a, b, c, d]
print(myList.indexOf('c')); // 2
print(myList.indexOf('e')); // -1
myList.remove('a'); // [b, c, d]
myList.removeAt(1); // [b, d]
myList.fillRange(0, 1, 'x'); // [x, d]
myList.insert(1, 'y'); // [x, y, d]
myList.insertAll(2, ['m', 'n']); // [x, y, m, n, d]
print(myList.reversed); // (d, n, m, y, x), myList不变
print(myList.reversed.toList()); // [d, n, m, y, x]
print(myList.join('_')); // x_y_m_n_d
print(myList.join('_').split('_')); // [x, y, m, n, d]
Set 与 List 区别
Set 不能添加重复数据,List可以
1 | var s = new Set(); |
Map
Map 常用属性:
- keys 获取所有的 key 值
- values 获取所有的 value 值
- isEmpty 是否为空
- isNotEmpty 是否为不空
Map 常用方法:
- remove(key) 删除指定的 key 的数据
- addAll({…}) 合并 Map,给 Map 增加属性
- containsValue 查看 Map 内的值 返回 true/false
- forEach
- map
- where
- any
- every
Map 使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Map person = {
'name': 'shirley',
'age': 18,
'sex': 'female'
};
print(person); // {name: shirley, age: 18, sex: female}
person.keys.toList() // [name, age, sex]
person.values.toList() // [shirley, 18, female]
person.addAll({
"height": 168
}); // {name: shirley, age: 18, sex: female, height: 168}
person.containsValue('shirley'); // true
函数
1 | // 入口函数 |
类
Dart 是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是 Object 的子类
1 | class Person { |
Dart 中的抽象类 多态 和接口
Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
1 | /* |
Dart中的多态:
1 | /* |
和Java一样,dart也有接口,但是和Java还是有区别的。
1 | /* |
Dart 中的 mixins
1 | /* |
导入系统内置库实现请求数据 httpClient
1 | import 'dart:io'; |
Dart 导入 pub 包管理系统中的库
/*
pub包管理系统:
1、从下面网址找到要用的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
2、创建一个pubspec.yaml文件,内容如下
name: xxx
description: A new flutter module project.
dependencies:
http: ^0.12.0+2
date_format: ^1.0.6
3、配置dependencies
4、运行pub get 获取远程库
5、看文档引入库使用
*/
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'package:date_format/date_format.dart';
main() async {
// var url = "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1";
// // Await the http get response, then decode the json-formatted responce.
// var response = await http.get(url);
// if (response.statusCode == 200) {
// var jsonResponse = convert.jsonDecode(response.body);
// print(jsonResponse);
// } else {
// print("Request failed with status: ${response.statusCode}.");
// }
print(formatDate(DateTime(1989, 2, 21), [yyyy, '*', mm, '*', dd]));
Dart 库的重命名 Dart 冲突解决
/*
1、冲突解决
当引入两个库中有相同名称标识符的时候,如果是java通常我们通过写上完整的包名路径来指定使用的具体标识符,甚至不用import都可以,但是Dart里面是必须import的。当冲突的时候,可以使用as关键字来指定库的前缀。如下例子所示:
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
Element element1 = new Element(); // Uses Element from lib1.
lib2.Element element2 = new lib2.Element(); // Uses Element from lib2.
*/
import 'lib/Person1.dart';
import 'lib/Person2.dart' as lib;
main(List<String> args) {
Person p1=new Person('张三', 20);
p1.printInfo();
lib.Person p2=new lib.Person('李四', 20);
p2.printInfo();
}
部分导入
/*
部分导入
如果只需要导入库的一部分,有两种模式:
模式一:只导入需要的部分,使用show关键字,如下例子所示:
import 'package:lib1/lib1.dart' show foo;
模式二:隐藏不需要的部分,使用hide关键字,如下例子所示:
import 'package:lib2/lib2.dart' hide foo;
*/
// import 'lib/myMath.dart' show getAge;
import 'lib/myMath.dart' hide getName;
void main(){
// getName();
getAge();
}
延迟加载
/*
延迟加载
也称为懒加载,可以在需要的时候再进行加载。
懒加载的最大好处是可以减少APP的启动时间。
懒加载使用deferred as关键字来指定,如下例子所示:
import 'package:deferred/hello.dart' deferred as hello;
当需要使用的时候,需要使用loadLibrary()方法来加载:
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
*/