题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。

** 你可能需要
CSDN 网易云课堂教程
掘金 EDU学院教程
知乎 Flutter系列文章

通过FutureBuilder组件可实现在Flutter中将异步加载的数据更新显示到对应的组件上,基本使用代码如下:


/// 异步加载组件的基本使用
class FutureBuilderPage extends StatefulWidget {@override_TestPageState createState() => _TestPageState();
}/// 异步加载组件的基本使用
class _TestPageState extends State {///这里的泛型就是异步加载的数据类型///可自定义Future<String> _loadingFuture;@overridevoid initState() {super.initState();_loadingFuture = loadingDataFunction();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("异步加载数据"),),body: FutureBuilder<String>(//future:这个参数需要一个Future 对象,类似于 网络请求、IOfuture: _loadingFuture,///这里的数据格式与上述FutureBuilder设置的泛型格式一至initialData: "初始化的数据",///构建显示的 Widget  会根据加载的状态来多次回调些方法builder: (BuildContext context, AsyncSnapshot<String> snapshot) {//加载状态判断switch (snapshot.connectionState) {///可理解为初始加载显示的 Widget 异步加载开始时的回调case ConnectionState.none:return  Text('Result: ${snapshot.data}');///异步加载中的回调case ConnectionState.active:case ConnectionState.waiting:return CircularProgressIndicator();///异步加载完成的回调case ConnectionState.done://判断是否加载失败if (snapshot.hasError) {return Text('Error: ${snapshot.error}');} else {///通过 [snapshot.data]来获取异步加载的数据return Text('Result: ${snapshot.data}');}}return null;},),);}///模拟耗时的网络请求Future<String> loadingDataFunction() async {///模拟await Future.delayed(Duration(milliseconds: 4000));return Future.value("加载成功");}
}

运行效果如下:

需要特别注意的是为防止FutureBuilder组件的重绘问题,异步加载loadingFuture需要单独定义,一般定义在初始化函数中,另一种方式是结合AsyncMemoizer异步寄存器来保证异步加载只执行一次,在使用时使用别导包如下

import 'package:async/async.dart' show AsyncMemoizer;

然后对应的使用代码如下:


/// 异步加载组件的基本使用
class FutureBuilderPage2 extends StatefulWidget {@override_TestPageState createState() => _TestPageState();
}/// 异步加载组件的基本使用
class _TestPageState extends State {///定义异步寄存器AsyncMemoizer _memoization = AsyncMemoizer<String>();///模拟耗时的网络请求Future<String> loadingDataFunction() async {///模拟await Future.delayed(Duration(milliseconds: 4000));return Future.value("加载成功");}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("异步加载数据"),),body: FutureBuilder<String>(//future:这个参数需要一个Future 对象,类似于 网络请求、IOfuture: _memoization.runOnce(loadingDataFunction),///这里的数据格式与上述FutureBuilder设置的泛型格式一至initialData: "初始化的数据",///构建显示的 Widget  会根据加载的状态来多次回调些方法builder: (BuildContext context, AsyncSnapshot<String> snapshot) {//加载状态判断switch (snapshot.connectionState) {///可理解为初始加载显示的 Widget 异步加载开始时的回调case ConnectionState.none:return Text('Result: ${snapshot.data}');///异步加载中的回调case ConnectionState.active:case ConnectionState.waiting:return CircularProgressIndicator();///异步加载完成的回调case ConnectionState.done://判断是否加载失败if (snapshot.hasError) {return Text('Error: ${snapshot.error}');} else {///通过 [snapshot.data]来获取异步加载的数据return Text('Result: ${snapshot.data}');}}return null;},),);}
}

完结

Flutter异步加载FutureBuilder重绘解决方案相关推荐

  1. Flutter 异步加载数据并渲染列表

    这里踩了一脚坑,写flutter的时候还是与js有差异的,这里主要涉及到几个知识点,看官需要对几部分内容先理解才容易处理,PS:其实现在我也还有点懵~ 1. 网络请求,这里我分别使用了dio和http ...

  2. FLutter入门:异步加载组件FutureBuilder

    FutureBuilder 在实际开发中,进入一个页面后执行网络请求加载数据并显示是非常普遍的,这时候我们一般会显示loading直到加载完成显示正常页面.在flutter中我们可以在initStat ...

  3. Android ListView异步加载图片乱序问题,原因分析及解决方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是 ...

  4. Flutter进阶—网络与本地异步加载资源

    通过网络加载JSON文件的实例 import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/ ...

  5. U3D Addressables异步加载资源,创建大物体卡顿解决方案

    目前做的游戏里,因为是仙侠游戏,特效都是手绘的,需要用到特别多的SPINE文件,一个主角身上可能有上百个动画文件和贴图,创建起来特别特别慢,要四五十秒,试了一下,设置QualitySettings.S ...

  6. Echarts 异步请求不能加载本地JSON数据解决方案,以及Http-Server安装与使用

    文章目录 一.前言 二.分析&解决方案 三.Http-Server简介&安装方法 四.启动http本地服务方法 五.附:Http-Server可选配置 一.前言 最近学习eharts制 ...

  7. 模仿SDWebImage实现异步加载图片

    模仿SDWebImage实现异步加载图片 SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的. 注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:) 源 ...

  8. 浏览器渲染阻塞与优化-详解推迟加载、异步加载。

    我认为一个前端工程师是否优秀,很大程度上取决于对前端性能上优化的功力.所以性能优化对前端真的很重要!!! 本文介绍了什么是阻塞.为什么会阻塞?阻塞优化常用的5种方式以及他们的注意事项. 浏览器渲染阻塞 ...

  9. android学习笔记---64_ListView数据异步加载与AsyncTask

    2013/5/26 Java技术qq交流群:JavaDream:251572072 64_ListView数据异步加载与AsyncTask ------------------------------ ...

最新文章

  1. 《LINUX3.0内核源代码分析》第一章:内存寻址
  2. 他用“1 和 0”解决了人类两大难题,他是信息论之父,却渴望做“杂耍博士”...
  3. 青龙羊毛——帮多多(教程)
  4. nginx-启动gzip、虚拟主机、请求转发、负载均衡
  5. linux查看tcp络连接日志,Linux监控TCP连接数并触发日志记录
  6. 鸿蒙构架谁提供的,科普丨关于“鸿蒙”,不知道这些你都不好意思跟别人打招呼!...
  7. webx学习(三)——Webx Turbine
  8. fatal error LNK1104: 无法打开文件“***.lib“ 解决方法
  9. DataRowView 笔记
  10. 搜索系统硬盘中包含指定字符串的文件的工具和方法——全文搜索、搜索文件内容(持续更新中)
  11. 99乘法表c语言竖坐标,99乘法表c语言(c语言九九乘法表原理)
  12. 使用echars制作家谱图
  13. sql中用EXISTS替代IN、用NOT EXISTS替代NOT IN显著变化
  14. 计算机网络专用术语基本概念
  15. 如何通过“云之讯”平台,完成短信的发送
  16. 171204之条件查询总结
  17. 卤味商城小程序开发,打开市场竞争格局
  18. 河源环境监测站实验室建设布局考虑归纳
  19. 云开发多端用户模块实战(五)---uni-app基础(三)---uni-app组件简略使用
  20. pynng 超快速上手,但不保熟

热门文章

  1. 彭博社“机器学习基础”视频教程已经全部搬到腾讯视频
  2. 反射 数据类型_C#扫盲篇(一):反射机制情真意切的说
  3. mysql5.7单表最大容量_mysql 5.7单表300万数据,性能严重下降,如何破?
  4. 数据结构期末复习之平衡二叉树
  5. 写给萌新们的Python安装及环境配置(anaconda,pycharm,GPU)教程
  6. python数据处理随笔总结
  7. 数据结构(六)霍夫曼树与编码
  8. 对于原始轨迹的噪声过滤方法和曲率计算方法
  9. android倒计时动画特效,Android仿活动时分秒倒计时效果
  10. python 可视化项目_python3项目之数据可视化