1、获取测试数据
2、集成网络请求工具
- Dart库
pubspec.yaml
文件,cupertino_icons:
中贴入库名与版本号,Pub get
即可
3、模型转换
3.1、Map转Json
json.encode(value);
3.2、Json转Map
json.decode(value);
3.3、创建特定模型(传参,返回特定值)
4、异步
- 多线程是包含A、B、C多个进程,异步是A进程下a、b、c任务
- 定义的方法后加
async
,耗时操作前加await
表示等待耗时操作结束后再进行下一步。 Dart规定async标记的异步函数,只能由await来调用
,不加await则按同步函数顺序执行
4.1、Future
-
未来获取数据,内部已经被包装成异步的,单独使用时加不加async没影响
-
await
:设置等待Future包装的任务完成后,再执行下边代码,与async
搭配使用- 后边任务必须是异步才能用
await
修饰 - 当前函数也必须是异步函数
- 会阻塞后边所有代码执行,如果该函数中还有要先执行的其他代码则可不用await,而改用
.then(value) => 待耗时操作结束后执行的代码
- 后边任务必须是异步才能用
-
.then(value)
中的value为Future内最终return的值,但如果有异常,那么.then()不执行
-
.then(类型 value) {代码}.catchError((errorMessage){代码}).whenComplete((){代码}).timeout(Duration(seconds: 1));
-
不初始化直接链式调用
-
初始化后对实例链式调用
-
一个任务一个任务的执行
-
多个Future都完成后再执行
-
-
,onError:(){}
与.catchError()
区别:onError(){} 一次就结束,.catchError() 是链式,可多次使用
4.2、FutureBuilder
- 异步渲染,最终内部要
return
一个widget - 不复杂界面使用效率高,不需要对状态、数据进行存储
4.2.1、snapshot.connectionState
- 异步渲染状态
4.2.2、snapshot.data
- 异步渲染数据
4.3、scheduleMicrotask(callback)
:微任务
- Flutter有两种队列,一个是
事件队列
,一个是微任务队列
,微任务队列优先级高于事件队列 - .then() 其实也是微任务,Future加载后就将.then()加入微任务队列,所以优先级很高
注:
sleep()
会阻塞主线程
5、多线程
5.1、特点与对比异步
- 异步是单线程的,Flutter多线程更类似于多进程,因为
各线程有独立的内存空间
- 因为内存独立,所以无法直接调用修改,也没有抢占资源的问题,因此
没有锁!
5.2、修改内容
5.2.1、Isolate
:隔离
- 因为内存独立,将内部与外部隔离,因此
修改内容需要通讯
- 使用后,
端口要关闭
、线程要kill
ReceivePort()
; 创建端口Isolate.spawn(func,port)
; 创建线程,执行一个将端口作为参数的方法
port.listen((message){代码})
; 监听端口内容port.send(message)
; 发送端口内容
5.2.2、compute(func,param)
- 可以直接接收子线程的变量
- 内部是对Isolate的封装,在compute(func,param)中修改外部变量不生效
6、状态保持
- 混入
AutomaticKeepAliveClientMixin
类
个人学习,仅供参考,持续修改