flutter基础之dart

1,629 阅读2分钟

安装计算机全局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