构造方法
Dart 可以按照需求自定义构造方法,学习构造方法正好把前面学到的 类 属性 方法 私有变量 结合运用一下,
例子

虽然只是短短的20多行代码,但是它还是有挺多知识点的这里梳理一下
1.私有变量或者方法是以 _(下划线开始的) 他不能被方位,如果想要获取和修改需要添加set 和get 方法, get方法 直接返回value 可以简写
2.普通的构造方法有且只能有一个
3.按照需求自己命名的构造方法
4.方法非必要参数使用,和简写 并与私有变量set 结合使用
Isolate
通过简介和浏览网页我大概知道了一些情况,感觉理解的很不到位,为办法的事情,都是自己学的,有什么不懂得东西我相信再接下来的学习过程中会明白的,在这里只要明白Dart 是单线程的 使用isolate 可以实现类似多线程的数据通信,在网上有一个比较官方的解释:因为在Dart中线程不会共享内存,所以也不存在死锁,从而也导致了Isolate之间的数据只能通过port的端口方式发送接口,所以Isolate也称为隔离的执行. 按照我的理解就是 一个isolate 不能访问另一个isolate的变量,也就是两个isolate不能共享局部变量
自己的东西只能自己访问,如果想要共享,只能使用port 发送和接收消息
这里写一个最简单的Isolate 例子,然后再根据自身的理解稍微完善一下,
由于isolate 的入参里面含有一个方法参数,但是我的androidstudio 4.0 传入方法的写法和 我看到的文章不同,我还重新看了一下传递方法的入参的写法,
例子

首先定义两个 方法,one 方法 入参String 返回String two 入参String void
再定义一个addMethod 两个参数就是按照上面那两个方法定制的,
使用addMethod 的时候有两种写法

结果

可以看到 第二种写法的结果上出现的是 tsm1 这种就是在入口修改参数的方法,感觉还是这种写法比较靠谱
isolate

最简单的Isolate 创建模式,
这里面一个新的知识点 async 和 await 字面上的意思 async 异步 await 等一等
这就比较好理解了,async 就是标识这个 方法开启了异步耗时工作,await 就是执行到这里了的等一下结果,再向下执行
在出现 await 关键字时必须要出现 async 关键字,
这里我先不增加 async 与 await 这两个关键字 打印一下结果

这里是先执行的主的isolate的打印,再执行新创建的isolate的打印
这里我再把await 加上打印一下日子

这样就看出来如果增加了await 就是需要先执行 新的isolate中的方法,如果未增加就是按照main方法里面的顺序执行,感觉这里的执行速度应该是创建新的isolate需要花费一定的时间,到时 main方法先结束,
下面我们想要从新的isolate中回调信息,使用到上面我们说的那个port 的方法
例子

想要接受回调 就必须将钩子传入 新的isolate中,这个钩子是从ReceivePort 中获取的SendPort,类似java中的回调, 只给回传消息的部分就可以了
下面我们继续修改 subTask 让他的入参从原来的String 到 SendPort ,SendPort 让新的isolate 具备了发送了消息的能力
这里面我让显得isolate 等待了5秒,再发送消息
同时为了得到消息我们还未ReceivePort 添加了一个监听器,每次有消息回调的时候都会打印日志,
结果

监听第一条数据可以使用port.first
监听每一条数据也可以使用、
port.forEach((element) {printString(element);}); 这个方法 等同于 port.listen((message) {printString('listen: $message');});

异步现在就学习了这么写,类似java中最简单的newThread 的使用,关于类似线程池的使用方法,个人觉得应该放在后面,
还有Zone 的概念看的也是模模糊糊,我觉得也是应该在更输入的了解了flutter之后再去看这种理论知识,这里也先放一放
拓展方法
伴随着Flutter 1.12而来的Dart 2.7还支持拓展方法,它使用户可以向任何类型(甚至是无法控制的类型)添加新功能,并具有常规方法调用的简洁性和自动完成性
例子

这个里面我试了一下增加一个他的属性, 也试了增加他一个方法,这两种的解决方法都差不多,具体怎么用看自己,
使用

基础篇片尾语
到这里 Dart 语言基础就写完了,下一篇文件就开始学习控件了, 由于控件的属性非常杂乱,感觉不能像现在这种隔天更新一次的方式了,太扎心了 还是感觉自己的能力有限啊,但是我会继续更新的,虽然我也知道我现在写的这些东西对于没有Dart基础的小伙伴很不友好,但是我也是从这样过来的,没有哪个成功时不是通过努力得来的,我也是从这个阶段过来的,打算学习flutter 之前并没有从网上看什么文件,而是从flutter 中文网上面看了好久的基础语法,说实话从java变更到dart 说简单真的挺简单的,但是这里面也有很多东西被java固定了,慢慢适应吧,
我学习flutter的整个过程都记录在里面了
https://www.jianshu.com/c/36554cb4c804
最后附上demo 地址
网友评论