Flutter之Dart基础

一. Hello Dart

1.1 Hello Dart

和大多数语言一样,Dart的入口函数也是Main函数,新建一个helloDart.dart的文件,添加以下代码:

main(List<String> args) {
    print('Hello Dart');
}

终端执行dart helloDart.dart,便可以看到结果。

二. 定义变量

2.1 明确声明 Explicit

变量类型 变量名称 = 变量值;

String name = '小灿';
int age = 24;
double height = 1.70;

!注意:明确声明之后的变量不可以被其他类型的变量赋值

2.2 类型推导

var/dynamic/const/final 变量名称 = 变量值;

  • var在使用时会在直接获取当前赋值的变量类型,获取之后类型就确定了下来,不可以再使用其他类型给该变量赋值
var name = '小灿';
name = 18; // 错误,在第一次赋值的时候name变量已经被确定为String型
  • dynamic,动态确定变量类型,不建议该写法,容易出现类型安全问题
dynamic name = '小灿'; // name为String类型
name = 18; // name为int类型

2.2.1 final和const(常量)

final和const都是用于定义常量的,在获得了确定的值之后都是不可以被修改的。但是二者的使用是有区别的,final是在运行时动态获取的一个常量值,而const是在编译期间就已经确定下来的常量值。

// const
const name = '小灿'; // 正确
// const date = DateTime.now(); // 错误
final date = DateTime.now(); // 正确
  • name的赋值是在编译的时候就给定了一个确定的字符串,是正确的
  • date的值是在运行时通过DateTime.now()去实时获取的,该情况下是不能用const的
  • final可以在运行时给定一个常量
  • final和const赋值之后都不可以再被改变

三.数据类型

3.1 数字类型

int age = 24;
double height = 1.70;
// 字符串转换成数字
int ageNum = int.parse('24');
double heightNum = double.parse('1.70');
// 数字转换成字符串
String ageString = ageNum.toString();
String heightString = heightNum.toString();

3.2 布尔类型

bool isGirl = true;
isGirl = false;
// Dart中不可以判断非空即真
String name = '小灿';
// if (name) {
//    
// }
// 错误的用法

3.2 字符串类型

// 单双引号都行
String s = 'Hello Dart';
String s1 = "Hello Dart";
// 多行字符串可以用三引号
String s2 = '''
Hello Dart
nihao
Happy
''';
// 字符串拼接
String name = '小灿';
int age = 24;
double height = 1.70;
print('name:${name}, age:$age, height:$height');
// 可以使用$(xxx)的方式拼接字符串,当xxx是一个标识符的时候,{}可以省略

3.2 集合

Dart有三种集合类型 List / Set / Map

  • List
List list = ['a','b','c','d']; // 这种方式是推导List的数据类型
List<int> intList = [1,2,3,4]; // 指定List的数据类型为int 
  • Set (相对于List,Set是无序且元素是不重复的)
Set set = {'a','b','c','d'}; // 这种方式是推导Set的数据类型
Set<int> intSet = {1,2,3,4}; // 指定Set的数据类型为int 
  • Map
Map map = {'name' : '小灿', 'sex' : '男'}; // 这种方式是推导Map的数据类型
Map<String, String> typeMap = {'name' : '小灿', 'sex' : '男'}; // 指定Map的数据类型

集合类型的常见操作

// 获取长度
print(list.length);
print(set.length);
print(map.length);
// 添加元素
list.add(xxx);
set.add(xxx);
// 删除元素
list.remove(xxx);
set.remove(xxx);
list.removeAt(index)// 根据下标删除
// map的基本操作
// 根据key获取具体内容
print(map['name']); // 小灿
// 获取所有内容
print('${map.entries}');// (MapEntry(name: 小灿), MapEntry(sex: 男))
// 获取所有key
print('${map.keys}'); // (name, age) 
// 获取所有key
print('${map.values}'); // (小灿, 男)
// 判断是否包含某个key
map.containKey('xxx'); // true || false
// 根据key删除元素
map.remove('xxx');

四.函数

函数在Dart中也是属于一种对象,类型为Function,因此在Dart中函数可以作为变量作为其他函数的参数或者返回值,一般我们称之为函数是一等公民

函数的定义:

返回值 函数名称 (参数列表) {
函数体
return 返回值
}

// 完整的函数定义
int sum(num num1, num num2) {
  return num1 + num2;
}
// 箭头函数语法 内容不能是语句,只能是一个表达式
sum(num num1, num num2) => num1 + num2;

参数

参数有两种类型:可选参数、必选参数

  • 可选参数
// 命名可选参数 
funcName( {int age, double height}) {

}
// 调用 命名可选参数调时参数不区分顺序
funcName();
funcName(age: 24);
funcName(height: 1.70);
funcName(age: 24, height: 1.70);

// 位置可选参数 
funcName2([int age, double height]) {

}
// 调用 位置可选参数在传参数时必须按照声明时的顺序传参
funcName2(); 
funcName2(24); 
funcName2(24, 1.70);
  • 必选参数
// 必选参数 
funcName(String name) {

}
// 调用
funcName("xxx");
  • 参数的默认值
    可选参数才可以有默认值,必选参数没有默认值
// 默认值
funcName({int age = 24, double height = 1.70}) {

}
  • 匿名函数
    有些情况下,不对函数进行命名可能会更方便,或者说更简单,我们可以使用匿名函数
List list = ['a','b','c'];
// 打印数组
// 命名函数打印
func(value) {
    print(value);
}
list.forEach(func);
//  匿名函数打印
list.forEach((value) {
    print(value);
});
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容