以后应该会一直更新吧我想。首先 我不表态flutter未来趋势,java将来也不可能被其他语言替代依旧会是中国的主导语言。学不学flutter在个人,争论以后这个有没有flutter工程师其实意义不大,因为每年语言都在换,你只有不断的学才能保持不败,现在flutter是最合适的一款,想学就慢慢学,过了打游戏的年纪就学吧~毕竟岁月不饶人,钱还没够的时候就努力进化成更好的人。

    去flutter官网下载其最新可用的安装包,官网地址:

    Dart语言简介:我感觉它跟C#很像,C#:c+java Dart:java+javascript 属于“杂交水稻”,强不强自己感觉到了嘛

    1.var:可以接受任何类型变量,但是为final

var t;t = "hi yun";// 下面代码在dart中会报错,因为变量t的类型已经确定为String,// 类型一旦确定后则不能再更改其类型。t = 10000;

    2.dynamic和Object:一看名字跟C#都一样一样的,看来就是想模仿并且超越,区别看代码一看就明白。

相同:dynamic t;Object x;t = "";x = "";//下面代码没有问题t = 1001;x = 10002;不同:dynamic a;Object b;main(){    a = "";    b = "";    printLengths();}printLengths(){    // no warning    print(a.length);    // warning:    // The getter 'length' is not defined for the class 'Object'    print(b.length);}

    3.final和const: 一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量,final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略,如:

//可以省略String这个类型声明final str = "yun";final String str = "yun";const str1 = "yun";const String str1 = "yun";

    4.函数声明:就是函数也是对象,方便了

// 1.函数声明bool isNoble(int aaaa){    return _nobleGases[aaaa]!=null;}// 2.dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理,注意,函数返回值没有类型推断:typedef bool CALLBACK();//不指定返回类型,此时默认为dynamic,不是boolisNoble(int bbbbb){    return _nobleGases[bbbbb]!=null;}void test(CALLBACK cb){    print(cb());}//报错,isNoble不是bool类型test(isNoble);// 3.对于只包含一个表达式的函数,可以使用简写语法bool isNoble(int cccc)=>_nobleGases{cccc}!=null// 4.函数作为变量var say = (str){    print(str);};say("yun");// 5.函数作为参数传递void execute(var callback){    callback();}execute(()=>print("yun"))// 6.可选的位置参数:这个本人很喜欢 以后感觉这样写很舒服~而且感觉以后$这个运算符要用的很多地方了~String yun(String from,String msg,[String device]){    var result = '$from say $msg';    if(device!=null){        result = '$result with a $device';    }    return result;}yun('geek','yun');// 结果: geek says yunyun('geek','yun','heart');// 结果:geek says yun with a heart// 7.可选的命名参数:这个以后会用的多要会~void yun({bool yun1,bool yun2}){    // ......}yun(yun1:false,yun2:true);

    5.异步支持:这个等了很多年了,终于有了 不用写逻辑了,无脑的以结果为导向去刷新ui完美~所以google起名字也很诗意 Future

// 1.先看看基本写法:其实比较伤的是这样写法是真的不好找啊,也可能是我还没习惯吧~Future.delayed(new Duration(seconds: 2), () {  return "hi yun~";}).then((data) {  print(data);});// 2.异步任务错误捕捉:Future.delayed(new Duration(seconds: 2), () {  throw AssertionError("Yun Error");}).then((data) {  //执行成功会走到这里  print("yun success~");}).catchError((e) {  //执行失败会走到这里  print(e);});// 3.也可以这样写捕捉错误:Future.delayed(new Duration(seconds: 2), () {  throw AssertionError("yun error~");}).then((data) {  print("yun success~");}, onError: (e) {  print(e);});// 4.Future.whenComplete:在网络请求前弹出加载对话框,在请求结束后关闭对话框Future.delayed(new Duration(seconds: 2), () {  throw AssertionError("yun error~");}).then((data) {  //执行成功会走到这里  print(data);}).catchError((e) {  //执行失败会走到这里  // loading success  print(e);}).whenComplete(() {  //无论成功或失败都会走到这里  // loading success});// 5.Future.wait:马上经典的来了~看仔细了~能省很多代码Future.wait([  // 2秒后返回结果  Future.delayed(new Duration(seconds: 2), () {    return "hi ";  }),  // 4秒后返回结果  Future.delayed(new Duration(seconds: 4), () {    return "yun~";  })]).then((results) {  // 4秒后你会在控制台中看到“hi yun~”  print(results[0] + results[1]);}).catchError((e) {  print(e);});// 6.Async/await:最厉害要来了 以前的逻辑现在全部都变成传递值 是不是很舒服~Future
 login(String name, String pwd) {  // 用户登录 返回id};Future
 getInfo(String id) {  // 获取用户信息 返回info};Future saveInfo(String info) {  // 保存到本地};// 1login("yun", "lx").then((id) {  //登录成功后通过,id获取用户信息  getInfo(id).then((info) {    //获取用户信息后保存    saveInfo(info).then((yun) {      //保存用户信息,接下来执行其它操作    });  });});// 2login("yun", "lx").then((id) {  return getInfo(id);}).then((info) {  return saveInfo(info);}).then((e) {  //执行接下来的操作  print(e);}).catchError((e) {  //错误处理  print(e);});// 3 task() async {  try {    String id = await login("yun", "lx");    String info = await getInfo(id);    await saveInfo(info);    //执行接下来的操作  } catch (e) {    //错误处理    print(e);  }}// 7.Stream:常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等Stream.fromFutures([  Future.delayed(new Duration(seconds: 1), () {    return "hi yun1";  }),  Future.delayed(new Duration(seconds: 2), () {    throw AssertionError("yun error1");  }),  Future.delayed(new Duration(seconds: 3), () {    return "hi yun3";  })]).listen((data) {  print(data);}, onError: (e) {  print(e);}, onDone: () {});// 结果:hi yun1Assertion failedhi yun3

    总结:今天说的不多不少,感觉flutter的写法要有一个过程, 我刚开始的时候也不是很习惯,但是写习惯了,真的java唉,不说了,我的~

    附:客观讲如果有时间还是要多学学的,毕竟年轻 最好是两个人一起共同进步,有也动力,别太累就行,坚持下去,我觉得博客应该会继续更新下去,至于在编程的路上能走多远,看心情,随心而走,尽量不要让自己有后悔的事情,你不学错过那就是一辈子,当然也不用那么用力去追赶,跟着兴趣走,这样无负重的前进才是生活~一起加油~

    haiyun2.png