Dart学习

71 阅读2分钟

变量与常量

变量

  • var

可以通过 var 关键字来声明一个变量,可以整型、字符串类型、布尔类型等

var str = 'string';
var myNum = 123;
var flag = true;
  • String

通过 String 关键字来声明字符串变量

String str = '123';
  • int

通过 int 关键字来声明整型变量

int a = 10;
  • double

通过 double 关键字来声明浮点型变量

double d = 3.14;
  • bool

通过 bool 关键字来声明布尔型变量

bool flag = false;

常量

  • const

这与 JavaScript 中的类式,通过const关键字来声明常量

const a = 10;
  • final
final date = new DateTime.now();

通过 final关键字也可以声明常量

const的区别:

  1. const 是编译时常量,在定义时就需要初始化,并且其值必须是在编译期间就可以确定的。
  2. final 是运行时常量,在定义时可以不初始化,但一旦初始化后就无法再修改其值。

List 和 Map

List

List 数据类型就类式与 JavaScript 中的数组

创建 List

1.直接创建

var list = [];
list.add(1);
print(list);
// or
List list2 = []
list2.add(1);
print(list2);

2.声明类型

var list = <String>['1', '2'];
list[1] = '0';
print(list2);

3.创建固定长度

var list = List<int>.filled(3, 6);
print(list3);

Map

Map 数据类型是一个字典集,类似于 JavaScript 中的 json

创建 Map

1.直接创建

var personMap = {
      "name": "John",
      "age": 18,
      "work": ["程序猿", "外卖员"]
  };

print(personMap['name']);
print(personMap['age']);

2.通过 new 关键字

var map = new Map();

map['name'] = "Maojiu";

判断数据类型 is

可以通过is关键字来判断数据类型

var a = 'string';

print(a is String);  // true

运算符与条件判断

运算符

算数运算符

int a = 10;
int b = 20;

print(a + b); // 加
print(a - b); // 减
print(a * b); // 乘
print(a / b); // 除
print(a ~/ b); // 取整
print(a % b); // 取余

关系运算符

> < == >= <= !=

int a = 10;
int b = 20;

print(a > b); // false

逻辑运算符

! && ||

bool flag = false;

print(!flag); // true

赋值运算符

  1. 基础赋值运算:= ??=(如过问好前面的值为空,则把等号后面的值赋值给它)
  2. 复合赋值运算:+= -+ \*= /= %= ~/=

三目运算符

a > b ? 'a': 'b'

int a = 10;
a > 100 ? true : false

?? 运算符

当 ?? 前面的值为空时则取 ?? 后面的饿值

var m;
var n = m ?? 10;
print(n);

条件判断

if else

bool flag = true;
if (flag) {
  print('true');
} else {
  print('false');
}

switch case

switch (number) {
  case 1:
    print('1');
    break;
  case 2:
    print('2');
    break;
  default:
    print('unknown');
}

数据类型转换

String to Number

通过int.parse()double.parse()来转换

String str1 = '123';
String str2 = '';
// 使用 try ... catch 捕获异常
try {
    var num1 = int.parse(str1);
    var num2 = double.parse(str2);
    print('num1:$num1');
    print(num2);
} catch (e) {
    print('Error:num2');
}

Number to String

通过 toString() 方法转换

int a = 10;
String b = a.toString();
print(b);

其他类型转换成 bool

//isEmpty: 判断字符串是否为空
String str = '';
if (str.isEmpty) {
print('str is empty');
}

循环

for 循环

  • 简单示例
for (int i = 0; i < 10; i++) {
    print(i);
  }
  • 遍历 List
List list = [
    {
      'cate': 'cate1',
      'new': [
        {'title': 'cate1 new1'},
        {'title': 'cate1 new2'},
        {'title': 'cate1 new3'}
      ]
    },
    {
      'cate': 'cate2',
      'new': [
        {'title': 'cate2 new1'},
        {'title': 'cate2 new2'},
        {'title': 'cate2 new3'}
      ]
    }
  ];
  for (int i = 0; i < list.length; i++) {
    print(list[i]['cate']);
    for (int j = 0; j < list[i]['new'].length; j++) {
      print(list[i]['new'][j]['title']);
    }
    print('----------');
  }

while 循环

 int i = 0;
  while (i < 10) {
    print(i);
    i++;
  }

do ... while 循环

int i = 0;
  do {
    print(i);
    i++;
  } while (i < 10);

List 常用属性和方法

常用属性

length

通过length来获取 List 的长度

List list = [1,2,3,4,5];
print(list.length); // 5

reversed

通过reversed将 List 翻转

List list = [1,2,3,4,5];
print(list.reversed); // (1,2,3,4,5)

isEmpty & isNotEmpty

可以通过isEmptyisNotEmpty来判断 List 是否为空

List list = [1,2,3,4,5];
print(list.isEmpty); // false
print(list.isNotEmpty); // true

常用方法

add

通过add向 List 中增加一个元素

List list = <String>['香蕉', '菠萝', '苹果'];
list.add('西瓜');

addAll

向 List 中添加多个元素(拼接 List)

List list = <String>['香蕉', '菠萝', '苹果'];
list.addAll(<String>['哈密瓜', '葡萄']);

indexOf

在 List 中查找,传入的为具体的值,若查到相应的值,则返回对应值的索引,否则返回-1

List list = <String>['香蕉', '菠萝', '苹果'];
print(list.indexOf('苹果'))

remove

删除 List 中的元素,传入的为具体的值

List list = <String>['香蕉', '菠萝', '苹果'];
list.remove('苹果');

removeAt

删除 List 中的元素,传入的为索引值

List list = <String>['香蕉', '菠萝', '苹果'];
list.removeAt(1);

fillRange

修改 List 中的元素,三个参数分别为: 起始索引,结束索引,要修改的值

List list = <String>['香蕉', '菠萝', '苹果'];
list.fillRange(0, 1, 'aaa');

insert

通过insert(index, value)向 List 中的指定位置插入元素,index为索引,value为要插入的值

List list = <String>['香蕉', '菠萝', '苹果'];
list.insert(1, '西瓜');

insertAll

通过insertAll(index, List)向 List 中的指定位置插入 List

List list = <String>['香蕉', '菠萝', '苹果'];
list.insertAll(1, <String>['西瓜', '葡萄']);

toList

通过toList将其他类型转换成 List

List list = [1,2,3,4,5];
print(list.reversed.toList()); // [5,4,3,2,1]

join

将 List 转换成字符串

List list = [1,2,3,4,5];
print(list.join(','));

split

将字符串转换成 List

String str = 'a-b-c';
print(str.split('-'));

Set 集合

基本使用

var s = new Set();
s.add('a');
print(s); // {a}

实现数组去重

List list = <int>[1, 2, 3, 4, 5, 4, 3, 2, 1];
var s = new Set();
s.addAll(list);
s.toList();
print(s.toList());

Map 常用的属性和方法

常用属性

keys

通过keys来获取所有的 key 值

var person = {"name": "John", "age": 18};
print(person.keys.toList());

values

通过values来获取所有的 value 值

var person = {"name": "John", "age": 18};
print(person.values.toList());

isEmpty & isNotEmpty

通过isEmpty and isNotEmpty来判断是否为空

var person = {"name": "John", "age": 18};
print(person.isEmpty); // false
print(person.isNotEmpty);  // true

常用方法

remove

通过remove(key)来删除指定 key 的数据

var person = {"name": "John", "age": 18};
person.remove('name');

addAll

使用addAll({...})来合并 Map 映射

var person = {"name": "John", "age": 18};
person.addAll({"sex": "男"});

containsKey

使用containsKey来查看映射内的键(返回 true/false)

var person = {"name": "John", "age": 18};
print(person.containsKey("name"));

containsValue

使用containsValue来查看映射内的值(返回 true/false)

var person = {"name": "John", "age": 18};
print(person.containsValue("John"));

常用的遍历方法

List

forEach

List list = ['吃饭', '睡觉', '敲代码'];

list.forEach((element) {
  print(element);
});

map

List list2 = [1, 2, 3];
var newList = list2.map((e) => e * 2);
print(newList.toList());

where

List list = [1, 2, 3, 5, 7, 9];
var newList = list.where((element) => element > 5);  // 只返回满足要求的(过滤)
print(newList.toList());

any

List list = [1, 2, 3, 5, 7, 8];
var res = list.any((element) => element > 5); // 只有有一个满足就返回true
print(res);

every

List list = [1, 2, 3, 4, 5, 7, 8];
var newList = list.every((element) => element > 5); // 只有全部满足才返回true
print(newList);

Set

var s = new Set();
s.addAll([1, 2, 3, 4, 5]);
s.forEach((element) => print(element));

Map

var p = {"name": "Maojiu", "age": 18, "sex": "男"};
p.forEach((key, value) {
  print('${key}---${value}');
});