前端开发_6-Flutter-Dart学习1
系列文章目录
@
目录
前言
一、Dart是什么?
Dart介绍:
Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。
Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。
要学Flutter的话我们必须首先得会Dart。
官网:https://dart.dev/
Dart环境搭建:
要在我们本地开发Dart程序的话首先需要安装Dart Sdk
官方文档:https://dart.dev/get-dart
windows(推荐):
http://www.gekorm.com/dart-windows/
mac:
如果mac电脑没有安装brew这个工具首先第一步需要安装它: https://brew.sh/
brew tap dart-lang/dart
brew install dart
Dart 开发工具:
Dart的开发工具有很多: IntelliJ IDEA 、 WebStorm、 Atom、Vscode等
这里我们主要给大家讲解的是如果在Vscode中配置Dart。
1、找到vscode插件安装dart
2、找到vscode插件安装code runner Code Runner 可以运行我们的文件
二、dart基本使用
1.第一个dart(入口方法)
/*
入口方法的两种定义方式
main(){
print('你好dart');
}
*/
///这也是一个注释
//表示main方法没有返回值
void main(){
print('你好dart');
}
2.变量和常量
/*Dart 变量:
dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推倒
dart中定义变量可以通过var关键字可以通过类型来申明变量
如:
注意: var 后就不要写类型 , 写了类型 不要var 两者都写 var a int = 5; 报错
*/
var str='this is var';print(str);//不指定类型,自动推测
String str='this is var';//字符串
int str=123;//数字类型
/*
Dart 常量: final 和 const修饰符
const值不变 一开始就得赋值
final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
永远不改量的量,请使用final或const修饰它,而不是使用var或其他变量类型。
*/
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
final a=new DateTime.now();print(a);//2019-05-10 15:59:02.966122
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
/*
Dart的命名规则:
1、变量名称必须由数字、字母、下划线和美元符($)组成。
2.注意:标识符开头不能是数字
3.标识符不能是保留字和关键字。
4.变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量。
5、标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
*/
3.数据类型
is 关键词来判断类型
/*
Dart中支持以下数据类型:
常用数据类型:
Numbers(数值):
int
double
Strings(字符串)
String
Booleans(布尔)
bool
List(数组)
在Dart中,数组是列表对象,所以大多数人只是称它们为列表
Maps(字典)
通常来说,Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次
项目中用不到的数据类型 (用不到):
Runes
Rune是UTF-32编码的字符串。它可以通过文字转换成符号表情或者代表特定的文字。
main() {
var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
}
Symbols
Symbol对象表示在Dart程序中声明的运算符或标识符。您可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。要获取标识符的符号,请使用符号文字,它只是#后跟标识符:
在 Dart 中符号用 # 开头来表示,入门阶段不需要了解这东西,可能永远也用不上。
http://dart.goodev.org/guides/libraries/library-tour#dartmirrors---reflection
*/
//字符串
var str1='this is str1';print(str1);
String str2='this is str2';print(str2);
String str3="""//格式输出!
this is str1
this is str1
this is str1
""";
print("$str1 $str2");//字符串拼接
print(str1 + str2);
print(str1 +" "+ str2);
//数值类型int和double
//1、int 必须是整型
int a=123;a=45; print(a);
//2、double 既可以是整型 也可是浮点型
double b=23.5; b=24;print(b);
//3、运算符 + - * / %
var c=a+b; print(c);
//布尔类型bool 值true/false
var a=123;
var b=123;
if(a==b){print('a=b');
}else{ print('a!=b'); }
//List(数组/集合)
//1、第一种定义List的方式
var l1=["张三",20,true];print(l1);print(l1.length); print(l1[0]);print(l1[1]);
//2、第二种定义List的方式 指定类型
var l2=<String>["张三","李四"];print(l2);
var l3 = <int>[12, 30];print(l3);
//3、第三种定义List的方式 增加数据 ,通过[]创建的集合它的容量可以变化
var l4 = [];print(l4); print(l4.length);
l4.add("张三"); l4.add("李四");l4.add(20);print(l4);print(l4.length);
var l5 = ["张三", 20, true]; l5.add("李四");l5.add("zhaosi");print(l5);
//4、第四种定义List的方式(通过List.filled创建的集合长度是固定)
//var l9=new List(); //在新版本的dart里面没法使用这个方法了
var l6 = List.filled(2, ""); //创建一个固定长度的集合 print(l6);print(l6[0]);
l6[0] = "张三"; //修改集合的内容l6[1]="李四";print(l6);
var l7=<String>["张三","李四"];print(l7.length); l7.length=0; //可以改变的print(l7);
var l8=List<String>.filled(2, "");l8[0]="string";
Maps(字典)
//第一种定义 Maps的方式
var person={
"name":"张三",
"age":20,
"work":["程序员","送外卖"]
};
print(person); print(person["name"]);
//第二种定义 Maps的方式
var p=new Map();
p["name"]="李四";p["age"]=22;p["work"]=["程序员","送外卖"];
print(p);print(p["age"]);
4.运算符
/*
1、Dart运算符:
算术运算符
+ - * / ~/ (取整) %(取余)
关系运算符
== != > < >= <=
逻辑运算符
! &&ang ||or
赋值运算符
基础赋值运算符 = ??= // b??=23; 表示如果b为空的话把 23赋值给b
复合赋值运算符 += -= *= /= %= ~/=
条件表达式
if else switch case
三目运算符
??运算符:
2、类型转换
1、Number与String类型之间的转换
2、其他类型转换成Booleans类型
3.++ -- 表示自增 自减 1
在赋值运算里面 如果++ -- 写在前面 这时候先运算 再赋值,如果++ --写在后面 先赋值后运行运算
4.循环for ,while do
for (int i = 1; i<=100; i++) {
print(i);
}
//1、求1+2+3+4 ...+100的和
// int i=1;
// var sum=0;
// while(i<=100){
// sum+=i;
// i++;
// }
// print(sum);
// int i=1;
// var sum=0;
// do{
// sum+=i;
// i++;
// }while(i<=100);
// print(sum);
*/
// 算术运算符
int a=13;
int b=5;print(a+b);print(a-b); print(a*b);print(a/b);print(a%b);print(a~/b);
var c=a*b;print('--------');print(c);
//关系运算符
int a=5; int b=3;
print(a==b); print(a!=b); print(a>b); print(a<b); print(a>=b); print(a<=b);
if(a>b){print('a大于b');
}else{print('a小于b'); }
//赋值运算符
//条件表达式
// var score = 41;
// if (score > 90) {
// print('优秀');
// } else if (score > 70) {
// print('良好');
// } else if (score >= 60) {
// print('及格');
// } else {
// print('不及格');
// }
// var sex = "女";
// switch (sex) {
// case "男":
// print('性别是男');
// break;
// case "女":
// print('性别是女');
// break;
// default:
// print('传入参数错误');
// break;
// }
bool flag = false;
String c = flag ? '我是true' : '我是false';
print(c);
// var a;var b= a ?? 10;print(b); //10
var a = 22;var b = a ?? 10; print(b);//22
//类型转换
//1、Number与String类型之间的转换
// Number类型转换成String类型 toString()
// String类型转成Number类型 int.parse()
String str='123';
var myNum=int.parse(str);
print(myNum is int);
String str1='123.1';
var myNum3=double.parse(str1);
print(myNum3 is double);
var myNum1=12;
var str2=myNum1.toString();
print(str2 is String);
// 2、其他类型转换成Booleans类型
// isEmpty:判断字符串是否为空
三、list,set,map,forEach
1.List
/*
List里面常用的属性和方法:
常用属性:
length 长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空
常用方法:
add 增加
addAll 拼接数组
indexOf 查找 传入具体值
remove 删除 传入具体值
removeAt 删除 传入索引值
fillRange 修改
insert(index,value); 指定位置插入
insertAll(index,list) 指定位置插入List
toList() 其他类型转换成List
join() List转换成字符串
split() 字符串转化成List
forEach
map
where
any
every
*/
void main(){
// List myList=['香蕉','苹果','西瓜'];
// print(myList[1]);
// var list=new List();
// list.add('111');
// list.add('222');
// print(list);
}
2.Set
//用它最主要的功能就是去除数组重复内容
//Set是没有顺序且不能重复的集合,所以不能通过索引去获取值
void main(){
// var s=new Set(); s.add('香蕉');s.add('苹果');s.add('苹果');
// print(s); //{香蕉, 苹果}
// print(s.toList());
List myList=['香蕉','苹果','西瓜','香蕉','苹果','香蕉','苹果'];
var s=new Set();
s.addAll(myList);
print(s);
print(s.toList());
}
3.Map
/*
映射(Maps)是无序的键值对:
常用属性:
keys 获取所有的key值
values 获取所有的value值
isEmpty 是否为空
isNotEmpty 是否不为空
常用方法:
remove(key) 删除指定key的数据
addAll({...}) 合并映射 给映射内增加属性
containsValue 查看映射内的值 返回true/false
forEach
map
where
any
every
*/
void main(){
// Map person={
// "name":"张三",
// "age":20,
//"sex":"男"
// };
// var m=new Map();
// m["name"]="李四";
// print(person);print(m);
//常用属性:
// print(person.keys.toList());
// print(person.values.toList());
// print(person.isEmpty);
// print(person.isNotEmpty);
//常用方法:
// person.addAll({
// "work":['敲代码','送外卖'],
// "height":160
// });
// print(person);
// person.remove("sex");
// print(person);
//print(person.containsValue('张三'));
}
4.特殊运算forEach map where any every
4./*
forEach
map
where
any
every
*/
void main(){
// List myList=['香蕉','苹果','西瓜'];
// for(var i=0;i<myList.length;i++){
// print(myList[i]);
// }
// for(var item in myList){
// print(item);
// }
// myList.forEach((value){
// print("$value");
// });
// List myList=[1,3,4];
// List newList=new List();
// for(var i=0;i<myList.length;i++){
// newList.add(myList[i]*2);
// }
// print(newList);
// List myList=[1,3,4];
// var newList=myList.map((value){
// return value*2;
// });
// print(newList.toList());
// List myList=[1,3,4,5,7,8,9];
// var newList=myList.where((value){
// return value>5;
// });
// print(newList.toList());
// List myList=[1,3,4,5,7,8,9];
// var f=myList.any((value){ //只要集合里面有满足条件的就返回true
// return value>5;
// });
// print(f);
// List myList=[1,3,4,5,7,8,9];
// var f=myList.every((value){ //每一个都满足条件返回true 否则返回false
// return value>5;
// });
// print(f);
// set
// var s=new Set();
// s.addAll([1,222,333]);
// s.forEach((value)=>print(value));
//map
Map person={
"name":"张三",
"age":20
};
person.forEach((key,value){
print("$key---$value");
});
}
总结
先熟悉基础。