阅读 391

Flutter网络(Flutter网络图片如何自适应)

1、获取测试数据

  • 接口管理网站生成测试数据image.png

    • 随机数据格式网站

    • 随机头像获取网站

2、集成网络请求工具

  • Dart库

  • pubspec.yaml文件,cupertino_icons: 中贴入库名与版本号,Pub get即可

3、模型转换

3.1、Map转Json

  • json.encode(value);

3.2、Json转Map

  • json.decode(value);

image.png

3.3、创建特定模型(传参,返回特定值)

image.png

4、异步

  • 多线程是包含A、B、C多个进程,异步是A进程下a、b、c任务

  • 定义的方法后加async,耗时操作前加await表示等待耗时操作结束后再进行下一步。

  • Dart规定async标记的异步函数,只能由await来调用,不加await则按同步函数顺序执行

image.png

4.1、Future

  • 未来获取数据,内部已经被包装成异步的,单独使用时加不加async没影响

  • await:设置等待Future包装的任务完成后,再执行下边代码,与async搭配使用image.png

    • 后边任务必须是异步才能用await修饰

    • 当前函数也必须是异步函数

    • 会阻塞后边所有代码执行,如果该函数中还有要先执行的其他代码则可不用await,而改用.then(value) => 待耗时操作结束后执行的代码

  • .then(value)中的valueFuture内最终return的值,但如果有异常,那么.then()不执行getoataO;.png

  • .then(类型 value) {代码}.catchError((errorMessage){代码}).whenComplete((){代码}).timeout(Duration(seconds: 1));

    • 不初始化直接链式调用image.png

    • 初始化后对实例链式调用image.png

    • 一个任务一个任务的执行image.png

    • 多个Future都完成后再执行image.png

  • ,onError:(){}.catchError()区别:onError(){} 一次就结束,.catchError() 是链式,可多次使用

4.2、FutureBuilder

  • 异步渲染,最终内部要return一个widget

  • 不复杂界面使用效率高,不需要对状态、数据进行存储

4.2.1、snapshot.connectionState
  • 异步渲染状态image.png

4.2.2、snapshot.data
  • 异步渲染数据image.png

4.3、scheduleMicrotask(callback):微任务

  • Flutter有两种队列,一个是事件队列,一个是微任务队列,微任务队列优先级高于事件队列image.png

  • .then() 其实也是微任务,Future加载后将.then()加入微任务队列,所以优先级很高

注:

  • sleep()会阻塞主线程

5、多线程

5.1、特点与对比异步

  • 异步是单线程的,Flutter多线程更类似于多进程,因为各线程有独立的内存空间

  • 因为内存独立,所以无法直接调用修改,也没有抢占资源的问题,因此没有锁!

5.2、修改内容

5.2.1、Isolate:隔离
  • 因为内存独立,将内部与外部隔离,因此修改内容需要通讯

  • 使用后,端口要关闭线程要kill

image.png

  • ReceivePort(); 创建端口

  • Isolate.spawn(func,port); 创建线程,执行一个将端口作为参数的方法

  • port.listen((message){代码}); 监听端口内容

  • port.send(message); 发送端口内容

5.2.2、compute(func,param)
  • 可以直接接收子线程的变量

  • 内部是对Isolate的封装,在compute(func,param)中修改外部变量不生效

image.png

6、状态保持

  • 混入AutomaticKeepAliveClientMixin

image.png

个人学习,仅供参考,持续修改


作者:晓之卫
链接:https://juejin.cn/post/7031508106739712031

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐