扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下利用FutureBuilder提高开发效率的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、桥西网站维护、网站推广。常见场景
展示请求按钮
用户点击按钮,显示loading
展示数据或者错误
抽象模式
展示请求按钮(初始状态)
用户点击按钮,显示loading(请求中状态)
展示数据或者错误 (结束状态(成功或失败))
转换成程序语言
以上三种现实情况对应 AsyncSnapshot 三个状态
ConnectionState.none 初始态
ConnectionState.waiting 请求态
ConnectionState.done 完成态
snapshot.hasError 完成(异常)
snapshot.hasData 完成(正常)
使用 FutureBuilder 处理这个场景
这篇文章的主角,FutureBuilder 就是为了解决这个问题存在的。它接收一个 Future 请求,和对应以上几种情况的 widget 回调。即可把数据和界面串联起来,避免额外声明仅用来传递数据用的变量。
提前声明了一个 _showResult 变量,以表示页面是否触发请求。
并且封装了一个 _fetch() 网络请求。
Future
请求的结果是任意的,不管是封装好的对象,map,list,都可以,只要是一个 Future
把这个 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
以上是“利用FutureBuilder提高开发效率的方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流