Flutter(二):基础语法

Dart和JavaScript的很相似,但是Dart是强类型语言,JavaScript是弱类型语言。

一:变量声明

1:var

var:可以接收任何类型的变量,但var的变量一旦赋值,类型便会确定,则不能再改变其类型

  	var i = 100;
	i  = "stt";  //在js中,这样没有问题,但是在Dart中,直接报错
	console.log(i);
2:dynamic和Object

ObjectDart所有对象的根基类,像OC中的NSObject
dynamic是声明变量的关键词,该变量可以赋值任意对象,像OC中的id

dynamicObject 他们声明的变量可以在后期改变赋值类型

	//下面的这两种写法是完全没有问题
  	dynamic i = 100;
    i = "str";
    Object o = 100;
    o = "str";

dynamicObject的区别

dynamic声明的对象编译器会提供所有可能的组合,
Object声明的对象只能使用Object的属性与方法, 否则编译器会报错。

    i.length; //没有问题
    i.lengthODtestsggg; //随便写一个不存在的方法,编译器不会报错,运行时报错,dynamic特性,它认为你实现了这个方法,等到运行时调用发现没有,才会crash
    o.length; //编译器会报错,因为Object没有方法length。
    
3:final和const

final和const修饰的变量不能再更改,两者区别在于:const 变量是一个编译时常量,final变量在第一次使用时被初始化。

被final或者const修饰的变量,变量类型可以省略

	final String name = "ob";
	//可以省略String这个类型声明
    final str = "ss";
    const str2 = "ss";

二:函数

Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function。这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征。

void main() {
	print("sssss");
}

返回值 如果没有显示声明返回值,那么默认返回值是dynamic

test(i){
  i = 10;
  print(i);
  return 10;
}

对于只包含一个表达式的函数,可以使用简写语法

void main() => print("ssf");

函数作为变量:因为函数是Function类型,继承Object,所以函数可以作为变量。

var name = (name) {
	print(name);
}
name("ob");

同样的,函数也就可以作为参数了

void ob_test(){
	print("ob");
}
void ob_func(dynamic obj){
	obj(); //如果是函数,那么调用改函数
}

ob_func(ob_test);

可选的参数:可以传可以不传


void ob_test(String name, int age, [String key]){
  print(name);
  print(age);
  if (key != null){
    print(key);
  }
}

  ob_test("ob",22,"北京的"); //"北京的"可以写可以不写

三:异步支持

Future.delayed(new Duration(seconds: 2),(){
   //return "hi world!";
   throw AssertionError("Error");
}).then((data){
   //执行成功会走到这里 
   print(data);
}).catchError((e){
   //执行失败会走到这里   
   print(e);
}).whenComplete((){
   //无论成功或失败都会走到这里
});

有些时候,我们需要等待多个异步任务都执行结束后才进行一些操作,比如我们有一个界面,需要先分别从两个网络接口获取数据,获取成功后,我们需要将两个接口数据进行特定的处理后再显示到UI界面上,应该怎么做?答案是Future.wait,它接受一个Future数组参数,只有数组中所有Future都执行成功后,才会触发then的成功回调,只要有一个Future执行失败,就会触发错误回调。下面,我们通过模拟Future.delayed 来模拟两个数据获取的异步任务,等两个异步任务都执行成功时,将两个异步任务的结果拼接打印出来,代码如下:

Future.wait([
  // 2秒后返回结果  
  Future.delayed(new Duration(seconds: 2), () {
    return "hello";
  }),
  // 4秒后返回结果  
  Future.delayed(new Duration(seconds: 4), () {
    return " world";
  })
]).then((results){
  print(results[0]+results[1]);
}).catchError((e){
  print(e);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值