
No more than code.
var name = 'Bob'; // var 声明的变量,若初始值为 null,后面可以赋值任何数据类型的值;若初始值已明确数据类型则后续不能更改。
dynamic name = 'Bob'; // dynamic 修饰的变量,可以赋给任何类型的值。
String name = 'Bob'; // 显式声明可以推断出的类型
int lineCount; // lineCount == null; 未初始化的变量默认值是 null。即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象
// Final 和 Const 创建的变量不能被修改,Const 变量 是隐式 Final 的类型
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
// 如果 Const 变量是类级别的,需要标记为 static const。
const bar = 1000000;
const double atm = 1.01325 * bar;
字符串和数字之间的转换:
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
String
// 以使用三个单引号或者三个双引号创建多行字符串:
var s1 = '''
你可以像这样创建多行字符串。
''';
var s2 = """这也是一个多行字符串。""";
// 在字符串前加上 r 作为前缀创建 “raw” 字符串(即不会被做任何处理(比如转义)的字符串):
var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。';
Boolean
// 检查是否为空字符串 (Check for an empty string).
var fullName = '';
assert(fullName.isEmpty);
// 检查是否小于等于零。
var hitPoints = 0;
assert(hitPoints <= 0);
// 检查是否为 null。
var unicorn;
assert(unicorn == null);
// 检查是否为 NaN。
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Lists
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
// 可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
// 如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
// 添加
var testList = List();
testList.add(14);
testList.add('111');
// 固定长度的list不能通过add添加数据,可通过以下方法
var testList = new List(3);
testList[0] = '雷锋';
testList[1] = '18';
testList[2] = '好人';
// 把一个数组元素全部添加到另外一个数组里
var testList1 = new List();
var testList2 = ['雷锋','18','好人'];
testList1.addAll(testList2);
// 向指定位置添加元素,如果位置越界就会报错
var testList = ['雷锋','18'];
testList.insert(2,'好人');
Dart 在 2.3 还同时引入了 Collection If 和 Collection For,在构建集合时,可以使用条件判断(if)和循环(for)
// 下面示例是使用 Collection If 来创建一个 List 的示例,它可能包含 3 个或 4 个元素:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
// 下面示例是使用 Collection For 将列表中的元素修改后添加到另一个列表中的示例:
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
Sets
// 使用 Set 字面量来创建一个 Set 集合的方法:
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
// 可以使用在 {} 前加上类型参数的方式创建一个空的 Set(例1),或者将 {} 赋值给一个 Set 类型的变量(例2):
var names = <String>{}; // 类型+{}的形式创建Set。例1
Set<String> names = {}; // 声明类型变量的形式创建 Set (This works, too).例2
var names = {}; // 注意:这样的形式将创建一个 Map 而不是 Set (Creates a map, not a set.)
// 向一个已存在的 Set 中添加项目可以使用 add() 方法或 addAll() 方法:
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
// 使用 .length 可以获取 Set 中元素的数量:
assert(elements.length == 5);
Maps
// 使用 Map 的构造器创建 Map
var gifts = Map();
// 向现有的 Map 中添加键值对
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
// 使用 .length 可以获取 Map 中键值对的数量:
assert(gifts.length == 3);
Dart 导库的 3 种方式
Dart 标准库 - 这里库都是 Dart 内部自带的,比如:dart:io、dart:html、dart:math
import 'dart:io';
Pub 包管理器 - 使用前缀:package:,像 Flutter 提供的包就是用 Pub 管理器导入
import 'package:flutter/material.dart';
指定路径 - 可以是相对路径或绝对路径
import 'lib/student/student.dart';
show、hide、as 关键字
show - 只导入指定的文件 hide - 隐藏指定文件,其他都导入 as - 起别名
import 'lib/student/student.dart' show Student, Person;
import 'lib/student/student.dart' hide Person;
import 'lib/student/student.dart' as Stu;
// 使用的使用要加上别名
Stu.Student s = new Stu.Student();