由于Flutter编写语言为Dart,所以想要学好Flutter就要先学好Dart的使用。

Dart语言的入口方法是main方法。即所有要被执行的代码都需要放在main方法中。

每条语句后面加分号代表语句结束。

1
2
3
main(){  
print('你好');
}
1
2
3
void main() { 
print('你好');
}

单行注释使用//

类型指定

类型可以使用弱语言指定方式,使用var关键字,系统会自动推断变量类型,也可以指定变量类型,如String

1
2
3
4
5
6
void main() {  
int a=1;
var b=1;
print(a);
print(b);
}

命名规范

1.变量名称必须由数字、字母、下划线和美元符$组成

2.标识符的开头不能是数字

3.标识符不能是保留字或关键词

4.变量的名字区分大小写

5.标识符(变量名称)一定要见名知义,变量名称建议用名词,方法名称建议用动词。

常量

使用const和final修饰

const的值不变,一开始就得赋值

final可以开始不赋值,只能赋值一次

const与final最主要的区别:final不仅有const编译时的特性,最重要的是它是运行时常量,并且final是惰性初始化的,即在运行时第一次使用前才初始化。

1
2
3
4
void main() {  
final a = new DateTime.now();
print(a);
}

常用数据类型

1.字符串类型

(1)定义方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void main() {  
//单引号双引号或者3引号都可以
// (1)
var str1 = "123";
// (2) String str2 = "456";
// (3)3引号可用于多行
String str3 = '''789
012''';
print(str1);
print(str2);
print(str3);
}


输出结果:
123
456
789
012

(2)字符串拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main() {  
var str1 = "123";
String str2 = "456";
// (1)第一种方法
var str3 = str1 + str2;
// (2)第二种方法
var str4 = '$str1$str2';
print(str3);
print(str4);
}


输出结果:
123456
123456

2.数值类型

数值类型分为两种:int和double

int:整型

double:浮点型

3.bool类型

值分为true和false

1
2
3
4
5
6
7
void main() {  
bool a=true;
print(a);
}

输出结果:
true

4.数组/集合类型

List

定义方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void main() {
// (1)第一种定义方式
var arr = [1, 2, 3, 4];
print(arr);
// (2)第二种定义方式
var arr2 = new List();
arr2.add('刘方涵');
arr2.add(2);
print(arr2);
}
// (3)定义时同时定义类型
var arr3 = new List<String>();
arr3.add('1');
print(arr3);
输出结果:
[1, 2, 3, 4]
[刘方涵, 2]
[1]

Set是没有顺序且不能重复的集合,所以不能通过索引去获取值

1
2
3
4
5
6
7
8
9
void main() {
var s = new List();
s.add("苹果");
s.add("苹果");
print(s);
}

输出结果:
[苹果, 苹果]
1
2
3
4
5
6
7
8
9
void main() { 
var s = new Set();
s.add("苹果");
s.add("苹果");
print(s);
}

输出结果:
{苹果}

列表的每一项处理的简便方法:

1
2
3
4
5
6
7
8
9
10
void main() {  
List a = [1, 2, 3];
var newList = a.map((value) {
return value * 2;
});
print(newList);
}

输出结果:
(2, 4, 6)

5.字典类型

Maps

类似于JS中的JSON对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main() {
// (1)第一种定义方式
var person = {
//注意:引号key与JS 不同,必须要加引号
"name": "刘方涵",
"age": 20
};
print(person);
print(person["name"]);
// (2)第二种定义方式
var p = new Map();
p["name"] = "刘方涵";
p["age"] = 20;
print(p);
}

输出结果:
{name: 刘方涵, age: 20}
刘方涵
{name: 刘方涵, age: 20}

获取对应的key和value

1
2
3
4
5
6
7
8
9
10
11
void main() {  
var person = {"name": "刘方涵", "age": 20};
//获取所有的key
print(person.keys);
//获取所有的value
print(person.values);
}

输出结果:
(name, age)
(刘方涵, 20)

增加指定的数据项

1
2
3
4
5
6
7
8
9
10
11
12
13
void main() {  
Map person={
"name":"刘方涵",
"age":20
};
person.addAll({
"work":"济南大学"
});
print(person);
}

输出结果:
{name: 刘方涵, age: 20, work: 济南大学}

删除指定的数据项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main() { 
Map person = {
"name": "刘方涵",
"age": 20
};
person.addAll({"work": "济南大学"});
print(person);
person.remove("age");
print(person);
}

输出结果:
{name: 刘方涵, age: 20, work: 济南大学}
{name: 刘方涵, work: 济南大学}

判断是否存在制定的数据

1
2
3
4
5
6
7
8
9
10
11
12
void main() { 
Map person = {
"name": "刘方涵",
"age": 20
};
print(person.containsKey("age"));
print(person.containsValue("刘方涵"));
}

输出结果:
true
true

遍历:

1
2
3
4
5
6
7
8
9
10
11
12
13
void main() { 
Map person = {
"name": "刘方涵",
"age": 20
};
person.forEach((k,v){
print('$k--$v');
});
}

输出结果:
name--刘方涵
age--20

数据类型的判断

使用is关键词来判断类型

1
2
3
4
5
6
7
8
9
10
11
void main() { 
var a = "123";
if(a is String){
print("这是字符串类型");
}else{
print("它是其他类型数据");
}
}

输出结果:
这是字符串类型

运算符

(1)算术运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void main() {
int a=13;
int b=5;
print(a+b);
print(a-b);
print(a*b);
print(a/b);//除法
print(a%b);//取余
print(a~/b);//取整
}

输出结果:
18
8
65
2.6
3
2

(2)关系运算符

==、!=、>、<、>=、<=

返回值为true或false

(3)逻辑运算符

!取反、||或者、&&并且

返回值为true或false

(4)赋值运算符

=、??=

1
2
3
4
5
6
7
8
9
10
11
12
void main() {
// ??=表示如果一个变量值为空,则赋值
int a; a ??= 12;
print(a);
int b = 1;
b ??= 3;
print(b);
}

输出结果:
12
1

(5)符合逻辑运算符

+=、-=、*=、/=、%=、~/=

条件表示式

(1)判断表达式

if else、switch case

三目运算符:

1
2
3
4
5
6
7
8
void main() { 
var score = 90;
score = score >= 90 ? 100 : 60;
print(score);
}

输出结果:
100

??运算符:

1
2
3
4
5
6
7
8
9
10
11
12
void main() {
var score = 1;
score = score ?? 10;
print(score);
var x;
x = x ?? 10;
print(x);
}

输出结果:
1
10

类型转换

(1)Number类型与String类型的转换

Number->String :toString();

String->Number:parse

1
2
3
4
5
6
7
8
9
10
11
void main() {  
var score = "1";
double a = double.parse(score);
if (a is double)
{
print(a);
}
}

输出结果:
1.0
1
2
3
4
5
6
7
8
void main() {  
double num = 12.3;
String str = num.toString();
print(str);
}

输出结果:
12.3

(2)其他类型转换为bool类型

1
2
str.isEmpty;
判断字符串是否为空

++、–

在赋值运算中,如果++、–写在前面,先运算再赋值,否则先赋值再运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main() { 
int a=1;
print(++a);
}

输出结果:
2



void main() {
int a=1;
print(a++);
}

输出结果:
1

循环语句(与JS类似)

List详细

属性 含义
length 长度
reversed 翻转(不改变原列表)
isEmpty 是否为空
isNotEmpty 是否不为空
方法 含义
add() 插入数据(一次只能插入一个数据)
addAll() 一次性插入多个数据,传入的是个数组
indexOf() 查找对应元素的下标,查找不到返回-1
remove() 删除指定的数据,会改变原列表
removeAt() 删除制定下表位置的元素
fillRange(start,end,修改的数据) 修改指定位置的数据
insert(下标,插入的数据) 在指定下标之前插入数据
insertAll(下标,插入数据 列表) 在指定下标之前插入多个数据

函数

特殊的函数:
命名参数:形参位置使用大括号,并且在函数调用的时候指明传参时的形参名

1
2
3
4
5
6
7
8
9
10
int test({int a}) {  
return a;
}
void main() {
int b = test(a: 2);
print(b);
}

输出结果:
2

把参数当作方法的方法:

1
2
3
4
5
6
7
8
9
10
11
12
fn1() { 
print("fn1");
}
fn2(f) {
f();
}
void main() {
fn2(fn1);
}

输出结果:
fn1

箭头函数:里面只能写一句话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void main() {  
List a = [1, 2, 3, 4, 5];
// (1)
a.forEach((value) {
print(value);
});
// (2)
a.forEach((value) => print(value));
}

输出结果:
1
2
3
4
5
1
2
3
4
5

匿名方法:

1
2
3
4
5
6
7
8
9
void main() {  
var fun = () {
print(123);
};
fun();
}

输出结果:
123

自执行方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main() {
(() {
print(123);
})();
}

输出结果:
123
-----------------------------------------------------------------------------------------
void main() {
((int n) {
print(n);
})(50);
}

输出结果:
50

闭包

Dart是 一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类。

按照编写规范,类名首字母最好大写

打印类中的信息时:

1
print("${this.属性名}");

私有变量下划线开头

在属性和方法前面添加static关键字可以定义静态的属性和方法,非静态的属性和方法必须实例化后才能访问。

静态成员不能访问非静态成员,非静态成员可以访问静态成员。在访问静态成员时不能通过this关键字,this关键字代表的是这个类的实例

对象操作符

(1)?.条件运算符。当类的对象未被实例化的时候,使用条件运算符直接调用类的对象或者方法不会报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class X{
int a;
void setA(int a){
this.a=a;
}
int getA(){
return this.a;
}
}
void main() {
X a;
print(a?.getA());
}


输出结果:
null

(2)as类型转换(这个目前存在错误)

(3)is类型判断,与之前的用法一致

(4)..级联操作(可以简化代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//此页面主要进行dart语言学习

class X{
int a=3;
void setA(int a){
this.a=a;
}
void printA(){
print(this.a);
}
}
void main() {
X x=new X();
x.printA();
x..setA(50)
..printA();
}

输出结果:
3
50

继承

(1)子类使用extends关键词继承父类

(2)子类会继承父类里面可见的方法和属性,但不会继承构造函数

(3)子类能够复写父类的方法getter和setter

@override在复写父类方法时可写可不写

抽象

相关文章
评论
分享
  • dart中HTTP请求的处理

    dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等… ,最重要的是国人开发,牛皮。 (1)添加dio库 找到项目中的pu...

    dart中HTTP请求的处理
  • dart底部导航栏的简单编写

    底部导航栏目前在手机应用中非常常见,可见其对于软件设计来说非常的有必要和重要。下面简单总结使用flutter和dart如何实现底部导航栏的制作。 首先值得注意的是底部导航栏为动态的组件,所以继承的话应该是StatefulWidget类...

    dart底部导航栏的简单编写
  • Flutter初识

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。...

    Flutter初识
  • Windows下neo4j的安装

    neo4j是一个高性能的NOSQL图形数据库,他将结构化数据存储在网络上而不是表中。他是一个嵌入式的、基于磁盘的、具备完全的事物特性的Java持久化引擎,neo4j也可看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。——百度...

    Windows下neo4j的安装
  • java实现类FTP程序

    继承程序设计实验,实验说明如图所示: 集成程序设计实验 TCP实现首先说明下基于TCP实现的功能: (1)能够实现多用户的同时连接 (2)用户执行成功的命令会在其他用户终端上显式说明 (3)当前用户数以及在线情况会在服务端实时显...

    java实现类FTP程序
  • Java中的流

    流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入输出都是以流的方式进行。设备可以是文件、网络、内存等。 I/O字节流InputStream字节输入流OutputStream字节输出流用于以字节的形式读取和写入数...

    Java中的流
  • eclipse使用

    Eclipse是一个开放源代码的、基于Java的可拓展开发平台。 常用快捷键 快捷键 作用 alt+/ 代码快速补全 ctrl+1 快速修复 ctrl+shift+f 代码格式化 ctrl+d 删除一行代码 ...

    eclipse使用
  • Python网络编程

    网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 它的含义是使用套接字来达到进程间的通信。套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。 套接字Socket=(IP地址:端口号) 端口号是...

    Python网络编程
  • Centos安装

    虚拟机下载及安装1.进入VMware官网,转到下载页面 https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstati...

    Centos安装
  • JavaEE开发准备

    个人电脑硬件配置: Windows 10 64位家庭中文版 8G运行内存 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 1.Java JDK安装及配置(1)下载和安装首先进入oracle网站中Ja...

    JavaEE开发准备
Please check the comment setting in config.yml of hexo-theme-Annie!