Flutter第一期 - 初识Flutter

    以后应该会一直更新吧我想。首先 我不表态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唉,不说了,我的~

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

    Flutter第一期 - 初识Flutter

    


上一篇:YUN神究竟有多强


下一篇:服务器部署minio