以后应该会一直更新吧我想。首先 我不表态flutter未来趋势,java将来也不可能被其他语言替代依旧会是中国的主导语言。学不学flutter在个人,争论以后这个有没有flutter工程师其实意义不大,因为每年语言都在换,你只有不断的学才能保持不败,现在flutter是最合适的一款,想学就慢慢学,过了打游戏的年纪就学吧~毕竟岁月不饶人,钱还没够的时候就努力进化成更好的人。
去flutter官网下载其最新可用的安装包,官网地址:https://flutter.io/sdk-archive/#windows
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,不是bool isNoble(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 yun yun('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<String> login(String name, String pwd) { // 用户登录 返回id }; Future<String> getInfo(String id) { // 获取用户信息 返回info }; Future saveInfo(String info) { // 保存到本地 }; // 1 login("yun", "lx").then((id) { //登录成功后通过,id获取用户信息 getInfo(id).then((info) { //获取用户信息后保存 saveInfo(info).then((yun) { //保存用户信息,接下来执行其它操作 }); }); }); // 2 login("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 yun1 Assertion failed hi yun3
总结:今天说的不多不少,感觉flutter的写法要有一个过程, 我刚开始的时候也不是很习惯,但是写习惯了,真的java唉,不说了,我的~
附:客观讲如果有时间还是要多学学的,毕竟年轻 最好是两个人一起共同进步,有也动力,别太累就行,坚持下去,我觉得博客应该会继续更新下去,至于在编程的路上能走多远,看心情,随心而走,尽量不要让自己有后悔的事情,跟恋爱一个道理,你不学错过那就是一辈子,当然也不用那么用力去追赶,跟着兴趣走,这样无负重的前进才是生活~一起加油~