ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flutter第一期 - 初识Flutter

2019-04-23 17:55:49  阅读:366  来源: 互联网

标签:return String 第一期 初识 yun print new Flutter Future


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

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

    haiyun2.png

    


标签:return,String,第一期,初识,yun,print,new,Flutter,Future
来源: https://blog.51cto.com/liangxiao/2383480

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有