以后应该会一直更新吧我想。首先 我不表态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唉,不说了,我的~
附:客观讲如果有时间还是要多学学的,毕竟年轻 最好是两个人一起共同进步,有也动力,别太累就行,坚持下去,我觉得博客应该会继续更新下去,至于在编程的路上能走多远,看心情,随心而走,尽量不要让自己有后悔的事情,你不学错过那就是一辈子,当然也不用那么用力去追赶,跟着兴趣走,这样无负重的前进才是生活~一起加油~
转载于:https://blog.51cto.com/liangxiao/2383480