常见场景
抽象模式
转换成html" target="_blank">程序语言
以上三种现实情况对应 AsyncSnapshot 三个状态
使用 FutureBuilder 处理这个场景
这篇文章的主角,FutureBuilder 就是为了解决这个问题存在的。它接收一个 Future 请求,和对应以上几种情况的 widget 回调。即可把数据和界面串联起来,避免额外声明仅用来传递数据用的变量。
提前声明了一个 _showResult 变量,以表示页面是否触发请求。
并且封装了一个 _fetch() 网络请求。
Future<Map> _fetch() async { return (await Dio().get("https://jsonplaceholder.typicode.com/users/1")) .data; }
请求的结果是任意的,不管是封装好的对象,map,list,都可以,只要是一个 Future<T>
把这个 Future 调用安放到 FutureBuilder 的 future 参数上, 并用 _showResult 来控制何时来触发这个请求。
FutureBuilder( future: _showResult ? _fetch() : null, ... )
再把每一个 Future 的结果对应的 widget 设置到 builder 参数上:
FutureBuilder( ... builder: (context, snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: // -------- 初始态 return RaisedButton( onPressed: () { setState(() { _showResult = true; // 点击按钮,触发请求 }); }, child: Text("start"), ); case ConnectionState.waiting: // -------- 请求态 return CircularProgressIndicator(); case ConnectionState.done: // -------- 完成态 if (snapshot.hasError) { // 异常 return Text( '${snapshot.error}', style: TextStyle(color: Colors.red), ); } else { // 正常 return Text(snapshot.data["name"]); } break; default: break; } return Container(); }, ),
总结
FutureBuilder 把数据请求的 Future<T> 中的数据 T 通过 Builder 的 ConnectionState 衍生出所有可能性,并在每个可能性里 return 一个 Widgets。最终实现了 state -> UI 的目的
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
框架基本固定,开发按结构来就可以了. 许多小功能基本都是一样的逻辑, 增,删,查,改. 数据表基本差不多,少量不一致,不能合表. 一个小功能下来,大多时间都在定义 api,对象,各层参数传递,转换,重复着基本一样的逻辑. 几个小功能下来,写都写烦了. 这个好像又没有好的办法避免,实在是想跳出这种又费力又对耐心的拆磨(虽然不费什么神思考太多,但对精神很是折磨),大家对此有没有经验分享一二. 哈哈,见
本文向大家介绍教你用Type Hint提高Python程序开发效率,包括了教你用Type Hint提高Python程序开发效率的使用技巧和注意事项,需要的朋友参考一下 简介 Type Hint(或者叫做PEP-484)提供了一种针对Python程序的类型标注标准。 为什么使用Type Hint?对于动态语言而言,常常出现的情况是当你写了一段代码后,隔段时间你可能忘记这个方法的原型是什么样子的了,你
本文向大家介绍在程序的开发中,如何提高程序的运行效率?相关面试题,主要包含被问及在程序的开发中,如何提高程序的运行效率?时的应答技巧和注意事项,需要的朋友参考一下 (1)优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询。 (2)数据表中创建索引。 (3)对程序中经常用到的数据生成缓存(比如使用redis缓存数据,比如使用ob进行动态
我基本上操作了这段代码http://svn.openstreetmap.org/applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/demo.java,以使用java Swing查看openstreetmap。
问题内容: 我必须更新我的Doctrine实体以匹配(可能很大)XML文件中的记录。我还必须根据XML中的数据更新ManyToMany关联。这是我在循环内执行的操作: 从XML获取数据 从数据库获取实体(如果不存在,则创建新实体) 设置新实体属性 获取当前的实体关联(getter返回对象) 清除所有关联(通过调用) 设置新的关联(通过在子循环中调用) 由EntityManager保留实体 *循环
Webstorm拥有非常强大的自动提示功能,但 javascript 太灵活了,又是弱类型语言,提示的准确度和详细度依然是个问题(比如,一个带参数的函数,Webstorm无法提示出参数的数据类型)。 Webstorm5.0 引入JSdoc的标签支持,通过开发者自己给代码加上符合jsdoc要求的注释,来达到强化js自动提示的目标。 随便写个类,没加任何jsdoc注释时: function User(