安装计算机全局dart依赖:
http://www.gekorm.com/dart-windows/
安装在vscode中的dart依赖
dart //语言依赖
code runner //快捷运行
1、声明入口文件
// 1、main方法
main(){
print('你好 dart');
}
// 2、
void main(){
}
// void表示无返回值
2、定义类型
//定义变量类型: 可以使用 var 关键词,也可以使用类型关键词
//可以不定义类型,自动进行类型推断
//var 可以自动推断类型,且定义后不可更改
//例如:
var str = 'this is dart'
String str1 = 'this id dart' //类型关键词声明
String //字符串
int // 数字
bool // 布尔类型
List //数组类型
Maps //字典类型
//1、字符串类型
String str2 =''' this is dart
this is dart
this is dart
'''
//通过 三个 单引号(或者双引号) 定义的 字符串类型,可以写多行
//字符串拼接输出
print("$str1 $str2")
print($str1+$str2)
//2、数字类型
int //整数类型
double //浮点型
//浮点型可以赋值为整型,但是整型不能赋值为浮点型
//3、数组类型
var all = ['1,','2'];
all.length //长度
all[1] // 2
var all2 = new List();
all2.add() //增加
//定义List 指定类型
var all3 = new List<String>();
//4、Maps类型 (类似json)
var person={
'name': '张三',
'age': 20
}
//打印
print(person['name'])
var p = new Map();
p['name'] = '张三'
//5、判断类型
if(str is String){
//判断str 是不是String类型
}
3、变量名称规则
变量区分大小写,且不可以数字开头, 使用 字母、数字、下划线、$
4、常量
const // 值不变,一开始就要赋值
final // 可以开始不赋值,只能赋值一次
//final是惰性的,只在调用时执行
//获取当前时间(const 不能定义时间)
final a = new DateTime.now()
5、条件判断
bool offs= true;
if(offs){
print('真');
}else{
print('假');
}
if(a == b){
}
// a= 123 b = '123' dart不会类型转换
var step = 60
if(step >90){
}else if(step >60){
}else{
}
switch(step){
case '60':
break;
default:
break
}
//三目运算
var c = step > 60 ? '大于60' : '小于60'
//??
var a;
var b=a ?? 10
//如果a不为空,则b=a,否则b=10
6、运算符
//1、算数运算符
print(1+2)
print(1-2)
print(1*2)
print(1/2)
print(1%2) //取余
print(1~/2) //取整
//2、关系运算符
print(1 == 2)
print(1 != 2)
print(1>2)
print(1>=2)
print(1<=2)
// 3、逻辑运算符
! 取反
&& 并且
|| 或者
//4、赋值运算(从右向左执行)
=
var b= 10
b??= 23
// 如果 b 为 空的话,b == 23
//5、符合运算符
var a=12
a+=10
a*=3
a++
b--
7、类型转换
//1、字符串转数字
parse()
var str ='12'
var strNums = int.parse(str)
var strNums = double.parse(str)
//建议使用 double
//2、数字转字符串
toString()
var nums = 12
var numsStr = nums.toString()
//捕获转换失败
try{
}catch{
}
//3、其他类型转bool
var str ='xxx'
if(str.isEmpty){
//如果str 为空
}
8、循环
for(int i=0;i<10;i++){
}
List all = [1,2,3,4,5]
for(var i=0;i<all.length;i++){
print(all[i])
}
while(表达式){
}
do{
}while(){
}
break //跳过循环体(只能跳出一层循环)
continue //跳出本次循环
9、List数组
List all =[1,2,3]
var all =new List()
all.length //长度
all.isEmpty //为空返回true
all.isNorEmpty //不为空返回true
all.reversed //翻转数组 (反转后 为(3,2,1))
all.reversed.toList() //重新转换为数组
add() //增加一个
addAll(['4','5'])//增加多个
all.indexOf('3') //返回3的索引,否则 -1
all.remove('2') //传入值
all.removeAt(1) //传入索引值
all.fillRange(start,end, 'a') // 开始 结束 修改为
all.insert(1,'a') //在 1的位置增加 a
all.insertAll(1,['a,','b'])
all.join(',')//以 , 分割为字符串
str.split('-') //以 - 切割为数组
//去重
var s = new Set()
s.add('香蕉')
s.add('苹果')
s.add('香蕉')
s.toList() //可以直接转成数组并去重
//Maps数据
var json={
'name': 'yellow'
}
json.keys //获取所有的key
json.values //获取所有的value
json.isEmpty //是否为空
json.isNotEmpty //是否不为空
json.addAll({ //增加键值对
'age': 27
})
json.remove('age') //删除键值对
json.containsValue('yellow') //是否存在 yellow 这个值
//操作
for(var item in json){
}
json.forEach((value){
})
all.map((value){
return value*2
})
all.where((value){ //返回满足条件是数据
return value>2
})
all.any((value){ //集合是否有一项大于2
return value >2
})
all.every((value){ //集合每一项都大于2
return value >2
})
10、函数
//void表示无返回值
void printInfo(){
print('这是自定义方法')
}
void main(){
print('调用系统内置方法')
printInfo()
//也可以放在 mian方法里面,这里返回int类型
int getNum(){
var MyNums= 123
return MyNums
}
}
//传参 //传入为int类型 返回为String类型
String getAll(int a,int b){
return a+b+''
}
//可选参数[]
String getAll(int a,[int b]){
return a+b+''
}
//默认参数
String getAll(int a,[int b=2]){
return a+b+''
}
//命名参数
String getAll(int a,{int b,String sex='男'}){
return a+b+''
}
getAll(29,b:10)
//把方法当作参数传入另一个方法
fun1(){
print('fin1')
}
fun2(fn){
fn()
}
fun2(fun1)
//箭头函数
List list=[1,2,3]
list.forEach((value)=>print(value))
list.forEach((value)=>{
print(value)
})
list.map((value){
if(value>2){
return value*2
}else{
return value
}
})
list.map((value)=>{
if(value>2){
return value*2
}else{
return value
}
})
//匿名函数
var printInt=(){
print('123')
}
//自执行函数
((){
print('123')
})()
//闭包
fun(){
var a=123
return (){
a++
print(a)
}
}
11、类
//定义类的首字母要大写,且要写作main函数外面
class Person(){
String name = '张三'
int age = 23
int src;
void gerInfo(){
print('${this.name}')
}
Person(int src){
this.src=src;
print('这是构造函数,在这个方法被实例化的时候触发')
}
}
void main(){
//实例化
var p1 = new Person()
p1.name
p1.getInfo()
}
12、系统内置库
import 'dart:math';
min(12,22)
max(12,24)
//
import 'dart:io';
import 'dart:convert';
//接口地址 http://www.baidu.com/api/s/src
_getDartFromZhihuAPI() async{
//1、创建httpClient对象
var httpClient = new HttpClient();
//2、创建url对象
var url = new Url.http('www.baidu.com','/api/s/src')
//3、发起请求
var request = await httpClient.getUrl(url)
//4、关闭请求
var res = await requset.clone()
//5、解码响应内容
return await res.transform(utf8.decoder).join()
}
//调用
var result = await _getDartFromZhihuAPI()
//引入第三方模块
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
//表示只引入getName方法
import 'lib/myMath.dart' show getName
//表示隐藏getName方法
import 'lib/myMath.dart' hide getName