函数
声明方式与OC类似。只是标注形参类型时不需要加 *,每句话写完,要加 ;
void thisIsDartFunction(int parma) {
print('hello dart');
}
参数类型:
- 必填参数
- 可选参数
写在必填参数后面
用中括号包裹起来
带默认值的可选参数 - 命名参数
用大括号包裹起来
调用时参数名称与声明函数中的名称保持一致 - 函数参数
// 必填
String user1(String name) {
}
// 可选 dynamic动态,不用赋值
String user2(String name, [dynamic age]) {
}
String user3(String name, [int age = 10]) {
}
// 命名参数
String user4(String name, {int age = 10}) {
}
void main() {
user1('1');
user2('2', 18);
user3('3', 18);
user4('4', age: 18);
}
异步函数
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:convert';
// Future getIPAddress() {
// final url = 'https://httpbin.org/ip';
// return http.get(url).then((response) {
// print(response.body);
// });
// }
Future getIPAddress() async {
final url = 'https://httpbin.org/ip';
final res = await http.get(url);
String ip = jsonDecode(res.body)['origin'];
return ip;
}
// void main() {
// getIPAddress()
// .then((value) => print(value))
// .catchError((error) => print(error));
// }
void main() async {
try {
final ip = await getIPAddress();
print(ip);
} catch (err) {
print(err);
}
}
变量
声明方式与swift和oc都有类似。使用var表示变量是可变的,也可字面量直接显式声明变量数据类型。
void thisIsDartFunction(int parma) {
var page = 0;
print('read to $page');
}
- 明确执行类型:int age = 11;
- 隐式声明类型:var age = 11; 或者 dynamic age = 11;
- 变量名是大小写敏感的。age与Age是两个变量
- 变量默认值是null(js中变量默认值是undefined)
- dart变量的值不会进行隐式类型转换(从int转为string)
常量
- 声明常量:
- const age = 11;
- final age = 11;
数据类型
Number、String、List、Boolean、Set、Map、其它
-
Number
int count = 3; double price = 11.1; // num类型,包含int和double类型 num x = 1.11; print(x.toString()); // 1.11 print(1.11.toInt()); // 1 // 四舍五入 print(1.23456.round()); // 1 print(1.23456.toStringAsFixed(4)); // 1.2346 // 取余 print(10.remainder(4)); // 2 // 数字比较: 0相同 1大于 -1小于 print(10.compareTo(12)); // -1 // 返回最大公约数 print(12.gcd(18)); // 6 // 科学计数法 print(1000.toStringAsExponential(1)); // 1.0e+3 // 判断非数字的NaN print(x.isNaN);
-
String
-
字符串声明:单引号、双引号、三引号(可带换行符)
-
常见API:
https://api.dart.cn/stable/2.13.4/dart-core/String-class.html -
正则表达式
-
常见基础API
String str1 = 'hello'; String str2 = " world"; String str3 = '''hello world'''; print(str1); // hello print(str2); // world print(str3); // hello //world // 拼接 print(str1 + str2); // hello world // 模板字符串 print('$str1 $str2'); // hello world // 字符串分割 str1.split('l'); // [he, o] // 字符串裁切(去空格) ' space '.trim(); // space // 判断字符串是否为空 ''.isEmpty; // true ''.isNotEmpty; // false // 字符串替换 str1.replaceAll('h', 'H'); // Hello // 字符串正则方式替换 '1a1b1c1d'.replaceAll(RegExp(r'\d+'), ''); // 1111 // 字符串正则方式匹配 var isPhone = RegExp(r'^1\d{10}$'); print(isPhone.hasMatch('13322223333')); // true print(isPhone.hasMatch('1332222333')); // false // 查找字符串 str1.contains('l') // true // 返回首先匹配到的下标 str1.indexOf('h') // 0
-
-
Boolean
布尔类型只有true和false
对变量判断时,要显式表达布尔值 -
List
-
常用API
https://api.dart.cn/stable/2.13.4/dart-core/List-class.html -
常见基础API
// 创建List // 字面量方式 List list = []; // 字面量——泛型 List list = <String>[]; // 扩展操作符 ... var list = [1, 2, 3]; var list2 = [0, ...list]; // 构造函数声明 —— 命名参数growable标识空数组是否可变 var list3 = new List.empty(growable: true); list3.add(1); // [1] var list4 = new List.filled(3, 6); // [6, 6, 6] // 扩展 var list5 = [0, ...list4]; // [0, 6, 6, 6] var list6; // 先判断后扩展 —— 避免警告 var list 7 = [0, ...?list6]; // [0] // list 长度 list5.length // 4 // 得到 list 翻转后的列表 var list8 = list5.reversed.toList(); // [6, 6, 6, 0] // 添加元素 list5.addAll([9, 3]); // [0, 6, 6, 6, 9, 3] // 直接删除元素 list5.remove(3); // [0, 6, 6, 6] // 通过下标删除元素 list5.removeAt(4); // [0, 6, 6, 6, 3] // 插入一个元素 list5.insert(4, 9); // [0, 6, 6, 6, 9, 3] // 插入多个元素 list5.insert(4, [8, 9]); // [0, 6, 6, 6, 8, 9, 3] // list清空 list5.clear(); // [] // 合并元素 List dartList = ['aaa', 'sss']; dartList.join('') // aaasss
-
List遍历
- forEach()
遍历列表 - map()
遍历列表并处理元素,生成新的列表并返回 - where()
返回满足条件的数据 - any()
只要有一项满足条件,返回true - every()
判断是否每一项都满足条件,都满足返回true
var list1 = [1, 2, 3]; var list2 = list1.map((element) { return element * element; }).toList(); // [1, 4, 9] var list3 = list1.map((element) => element * element;).toList(); // [1, 4, 9] // 数组的扩展 int list4 = [[1, 1], [3, 4]]; var list5 = list4.expand((element) => element).toList(); // [1, 1, 3, 4]
- forEach()
-
Set
- 无序的、元素唯一的集合,无法通过下标取值
- 可以求交集、并集、差集等
- 常见基础API:
// 字面量 var nums = <int>{1, 2, 3}; var fruits = new Sets(); fruits.add('apple'); fruits.add('orange'); // List转set List nums = [1, 1, 3, 2]; nums.toSet(); // 求交集 intersection // 求并集 union // 求差集 difference // 返回特定值 first last
-
Map
-
常见基础API
// 字面量 var map = {'name': 'Li', 'age': 20}; // 构造函数 var p = new Map()); p['name'] = 'Xie'; p['age'] = 28; // 检查Key是否存在 print(p.containsKey('name')); // 当不存在key时,才赋值 p.putIfAbsent('gender', () => '男'); // 获取所有key print(p.keys); // 获取所有value print(p.values); // 根据条件删除 p.removeWhere((key, value) => key == 'gender');
-